{
    "schemes": [
        "http",
        "https"
    ],
    "swagger": "2.0",
    "info": {
        "description": "A comprehensive personal management backend API for authentication, invite codes, expenses, budgets, and more.",
        "title": "UnDercontrol Backend API",
        "termsOfService": "https://undercontrol.com/terms",
        "contact": {
            "name": "API Support",
            "url": "https://undercontrol.com/support",
            "email": "support@undercontrol.com"
        },
        "license": {
            "name": "Proprietary",
            "url": "https://undercontrol.com/license"
        },
        "version": "1.0"
    },
    "host": "localhost:8888",
    "basePath": "/",
    "paths": {
        "/account": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all accounts belonging to the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Get all user accounts",
                "operationId": "getUserAccounts",
                "responses": {
                    "200": {
                        "description": "accounts and count",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new account for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Create a new account",
                "operationId": "createAccount",
                "parameters": [
                    {
                        "description": "Account creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.CreateAccountDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/account-history": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all account histories for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account History"
                ],
                "summary": "Get all account histories",
                "operationId": "getAccountHistory",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_account.AccountHistoryResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/account-history/{id}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a specific account history record by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account History"
                ],
                "summary": "Delete account history",
                "operationId": "deleteAccountHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account History ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "boolean"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the comment on a specific account history record",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account History"
                ],
                "summary": "Update account history comment",
                "operationId": "updateAccountHistoryComment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account History ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Comment update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.UpdateAccountHistoryCommentDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "boolean"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/account/home-page": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns account summary including totals, budget/off-budget accounts for user dashboard",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Get homepage summary data",
                "operationId": "getHomePage",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Roll all balances up into this currency (display-only, requires configured exchange rates)",
                        "name": "currency",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.HomepageResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Invalid currency code",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/account/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a specific account by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Get account by ID",
                "operationId": "getAccountByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Account not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing account's details",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Update an account",
                "operationId": "updateAccount",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Account update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.UpdateAccountDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete an existing account by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Delete an account",
                "operationId": "deleteAccount",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Success message",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/account/{id}/details": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve detailed information about a specific account including transactions",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Get detailed account information",
                "operationId": "getAccountDetails",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.AccountDetailsResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Account not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/account/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update group sharing settings for an account (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Account"
                ],
                "summary": "Share account to group",
                "operationId": "shareAccountToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group sharing settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.ShareToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Account not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/admin/api-reference": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a complete list of all API endpoints with their permission requirements. Only accessible by admin users. Only available in dev builds.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get API Reference",
                "operationId": "getAPIReference",
                "responses": {
                    "200": {
                        "description": "API Reference data",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.APIReferenceResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/download-metrics": {
            "get": {
                "description": "Get aggregated download metrics from audit logs",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get download metrics",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Number of recent downloads to return (default 50, max 200)",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.DownloadMetricsResponse"
                        }
                    }
                }
            }
        },
        "/admin/groups": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a list of all groups in the system with member counts. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "List all groups",
                "operationId": "listAllGroups",
                "responses": {
                    "200": {
                        "description": "List of groups",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ListGroupsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/groups/{id}/storage-class": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Set or clear a group's primary storage class",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Set group storage class",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Storage class assignment",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.SetGroupStorageClassRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/admin/growth-trends": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get daily user registration and download trends from audit logs",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get growth trends",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.GrowthTrendsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/identity-providers": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "List all configured identity providers (secrets masked)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Identity Providers"
                ],
                "summary": "List all identity providers",
                "operationId": "listIdentityProviders",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_auth.IdentityProviderResponse"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new domain-specific OAuth identity provider configuration",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Identity Providers"
                ],
                "summary": "Create an identity provider",
                "operationId": "createIdentityProvider",
                "parameters": [
                    {
                        "description": "Identity provider configuration",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.IdentityProviderRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.IdentityProviderResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/identity-providers/{id}": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing identity provider configuration",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Identity Providers"
                ],
                "summary": "Update an identity provider",
                "operationId": "updateIdentityProvider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Identity provider configuration",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.IdentityProviderRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.IdentityProviderResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete an identity provider configuration",
                "tags": [
                    "Identity Providers"
                ],
                "summary": "Delete an identity provider",
                "operationId": "deleteIdentityProvider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/permissions": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a list of all system-defined permissions with metadata. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "List all available permissions",
                "operationId": "listPermissions",
                "responses": {
                    "200": {
                        "description": "List of permissions",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ListPermissionsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/queue-tasks": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all queue tasks in the system with optional filtering. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get all queue tasks in the system",
                "operationId": "listAllQueueTasks",
                "parameters": [
                    {
                        "description": "Task filter criteria",
                        "name": "filter",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.QueueTasksQueryDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of all queue tasks",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.MultipleTasksResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/roles": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a list of all roles in the system. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "List all roles",
                "operationId": "listRoles",
                "responses": {
                    "200": {
                        "description": "List of roles",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ListRolesResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new role with specified permissions. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Create a new role",
                "operationId": "createRole",
                "parameters": [
                    {
                        "description": "Role creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.CreateRoleRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created role",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.RoleResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Role already exists",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/roles/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get detailed information about a specific role. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Get a role by ID",
                "operationId": "getRole",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Role ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role details",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.RoleResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Role not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing role's name, description, and permissions. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Update a role",
                "operationId": "updateRole",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Role ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Role update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.UpdateRoleRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Updated role",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.RoleResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Role not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Role name already exists",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a role from the system. System roles cannot be deleted. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Delete a role",
                "operationId": "deleteRole",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Role ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role deleted successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Cannot delete system role",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Role not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/share": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Admin endpoint to share a resource with another user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Share a resource with a user",
                "parameters": [
                    {
                        "description": "Share request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ShareResourceRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.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"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Admin endpoint to remove sharing of a resource",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Remove resource sharing",
                "parameters": [
                    {
                        "description": "Unshare request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.UnshareResourceRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/shares": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get list of users a resource is shared with",
                "tags": [
                    "Admin"
                ],
                "summary": "List shares for a resource",
                "parameters": [
                    {
                        "enum": [
                            "expense",
                            "budget",
                            "todolist",
                            "account"
                        ],
                        "type": "string",
                        "description": "Resource type",
                        "name": "resourceType",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "resourceId",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ListSharesResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/storage-classes": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "List all storage classes (sorted by order)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "List storage classes",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.StorageClassListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Create a new storage class",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Create storage class",
                "parameters": [
                    {
                        "description": "Storage class details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.CreateStorageClassRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.StorageClassResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/storage-classes/reorder": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Reorder storage classes (drag-and-drop)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Reorder storage classes",
                "parameters": [
                    {
                        "description": "New order",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.ReorderStorageClassesRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.StorageClassListResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/storage-classes/test": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Test a storage class configuration (without saving)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Test storage class configuration",
                "parameters": [
                    {
                        "description": "Configuration to test",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.TestStorageClassRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.TestStorageClassResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/storage-classes/{id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get a storage class by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Get storage class",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Storage Class ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.StorageClassResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Update a storage class",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Update storage class",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Storage Class ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Storage class details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.UpdateStorageClassRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.StorageClassResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Delete a storage class (fails if it is a default)",
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Delete storage class",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Storage Class ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/storage-classes/{id}/test": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Test an existing storage class by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Test existing storage class",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Storage Class ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.TestStorageClassResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/admin/storage/usage": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get storage usage statistics for all users. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get per-user storage usage",
                "operationId": "getStorageUsage",
                "responses": {
                    "200": {
                        "description": "Storage usage per user",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.StorageUsageResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-config": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all system configurations grouped by category. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Get all system configurations",
                "operationId": "getAllSystemConfigs",
                "responses": {
                    "200": {
                        "description": "All configurations grouped by category",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.GetAllConfigsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update multiple system configurations at once. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Batch update system configurations",
                "operationId": "batchUpdateSystemConfigs",
                "parameters": [
                    {
                        "description": "Batch configuration update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.BatchUpdateConfigsRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Update results",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.BatchUpdateConfigsResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-config/definitions": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all configuration definitions with default values and descriptions. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Get configuration definitions",
                "operationId": "getSystemConfigDefinitions",
                "responses": {
                    "200": {
                        "description": "Configuration definitions",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.GetDefinitionsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-config/refresh": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Force refresh the configuration cache from database. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Refresh configuration cache",
                "operationId": "refreshSystemConfigCache",
                "responses": {
                    "200": {
                        "description": "Cache refreshed",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.RefreshCacheResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-config/test/{category}": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Test configurations for a specific category (e.g., test OpenAI connection). Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Test configuration category",
                "operationId": "testSystemConfigCategory",
                "parameters": [
                    {
                        "enum": [
                            "ai",
                            "storage",
                            "integration",
                            "telemetry",
                            "identity"
                        ],
                        "type": "string",
                        "description": "Configuration category",
                        "name": "category",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Optional test parameters",
                        "name": "request",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.TestCategoryRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Test result",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.TestCategoryResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-config/{key}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a specific system configuration by its key. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Get a system configuration by key",
                "operationId": "getSystemConfig",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Configuration key",
                        "name": "key",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Configuration value",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.SystemConfigResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Configuration not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a specific system configuration by its key. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Update a system configuration",
                "operationId": "updateSystemConfig",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Configuration key",
                        "name": "key",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Configuration update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.UpdateConfigRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Updated configuration",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.SystemConfigResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a system configuration, restoring it to default value. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - System Config"
                ],
                "summary": "Delete a system configuration",
                "operationId": "deleteSystemConfig",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Configuration key",
                        "name": "key",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Configuration deleted",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_systemconfig.MessageResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Configuration not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-info": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get backend system information including database type, version, size, and table count. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get system and database information",
                "operationId": "getSystemInfo",
                "responses": {
                    "200": {
                        "description": "System information",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.SystemInfoResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/system-stats": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get overall system statistics. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Get system statistics",
                "operationId": "getSystemStats",
                "responses": {
                    "200": {
                        "description": "System statistics",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.SystemStatsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/users": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a list of all users in the system. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "List all users",
                "operationId": "listUsers",
                "responses": {
                    "200": {
                        "description": "List of users",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ListUsersResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new user in the system. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Create a new user",
                "operationId": "createNewUser",
                "parameters": [
                    {
                        "description": "User creation request",
                        "name": "createRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.CreateUserRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created user",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "User already exists",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/users/{id}": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a user's information. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Update user details",
                "operationId": "updateUser",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "User update request",
                        "name": "updateRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.UpdateUserRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Updated user",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "User not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a user from the system. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Delete user",
                "operationId": "deleteUser",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "User deleted successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "User not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/users/{id}/password": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Immediately replace a user's password. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Reset a user's password",
                "operationId": "resetUserPassword",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "New password",
                        "name": "resetRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ResetUserPasswordRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.ResetUserPasswordResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid password",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "User not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/users/{id}/roles": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all roles assigned to a specific user. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Get user's roles",
                "operationId": "getUserRoles",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "User's roles",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.UserRolesResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Assign a role to a specific user. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Assign a role to a user",
                "operationId": "assignRoleToUser",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Role assignment request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.AssignRoleRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role assigned successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.MessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Role not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "User already has this role",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/users/{id}/roles/{roleId}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Remove a role assignment from a specific user. Only accessible by admin users.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin - Roles"
                ],
                "summary": "Remove a role from a user",
                "operationId": "removeRoleFromUser",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Role ID",
                        "name": "roleId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role removed successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.MessageResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden - Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Role assignment not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/admin/users/{id}/storage-class": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Set or clear a user's primary storage class override",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Storage Class Admin"
                ],
                "summary": "Set user storage class override",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Storage class assignment",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_storageclass.SetUserStorageClassRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/admin/users/{id}/storage-quota": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Set per-user storage quota override",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Quota override",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_admin.SetUserQuotaRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Quota set",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Clear per-user storage quota override",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Quota cleared",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/ai/admin/providers": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "List all admin-configured AI providers (sorted by order)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "List admin AI providers",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProvidersListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Create a new admin-configured AI provider",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "Create admin AI provider",
                "parameters": [
                    {
                        "description": "Provider details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.CreateProviderRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/admin/providers/reorder": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Reorder admin-configured AI providers (drag-and-drop)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "Reorder admin AI providers",
                "parameters": [
                    {
                        "description": "New provider order",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ReorderProvidersRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProvidersListResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/admin/providers/startup": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get the startup provider configuration (from environment/CLI, read-only)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "Get startup provider configuration",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/admin/providers/{id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get an admin-configured AI provider by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "Get admin AI provider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Update an admin-configured AI provider",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "Update admin AI provider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Provider details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.UpdateProviderRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Delete an admin-configured AI provider",
                "tags": [
                    "AI Admin"
                ],
                "summary": "Delete admin AI provider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/admin/providers/{id}/availability": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Set availability for a specific usage type (backend/frontend)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI Admin"
                ],
                "summary": "Set admin provider availability",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Availability settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.SetAvailabilityRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/chat/providers": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all AI providers available for frontend AI chat. Returns provider info and whether to use proxy.\n- User providers (source=\"user\"): Frontend calls AI directly using API key from /ai/user/providers\n- Admin/Startup providers (source=\"admin\"/\"startup\"): Frontend calls /ai/chat/proxy with provider_id",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "List AI providers for frontend chat",
                "operationId": "getChatProviders",
                "responses": {
                    "200": {
                        "description": "List of providers for frontend chat",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ChatProvidersResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/chat/proxy": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Proxy chat completion requests through the backend to keep API keys secure.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "text/event-stream"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Proxy chat request to system AI provider",
                "operationId": "proxyChatRequest",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID to use (optional, uses default if not specified)",
                        "name": "provider_id",
                        "in": "query"
                    },
                    {
                        "description": "OpenAI-compatible chat completion request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "SSE stream of chat completion",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "502": {
                        "description": "AI provider error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "503": {
                        "description": "No system AI provider configured",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/config/validate": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Validate the provided AI configuration",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Validate AI configuration",
                "parameters": [
                    {
                        "description": "AI configuration",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.AIConfigRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "boolean"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/providers": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "List all providers visible to the user (user's own + admin + startup)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "List all providers",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProvidersListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/providers/{id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get a specific provider by ID (UUID for user/admin, or \"startup\")",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Get provider by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID (UUID or 'startup')",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/refine": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Refines user input text to be more clear, concise, and professional",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Refine text using AI",
                "parameters": [
                    {
                        "description": "Refine text request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.RefineTextRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.RefineTextResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/text": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Send a text-based request to the AI service for processing",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Send text request to AI service",
                "parameters": [
                    {
                        "description": "Text request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.TextRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.AIResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/user/providers": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "List the current user's AI providers (sorted by order). Includes API keys for frontend direct AI chat.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI User"
                ],
                "summary": "List user's AI providers",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProvidersListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Create a new AI provider for the current user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI User"
                ],
                "summary": "Create user AI provider",
                "parameters": [
                    {
                        "description": "Provider details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.CreateProviderRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/user/providers/reorder": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Reorder the current user's AI providers (drag-and-drop)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI User"
                ],
                "summary": "Reorder user's AI providers",
                "parameters": [
                    {
                        "description": "New provider order",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ReorderProvidersRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProvidersListResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/ai/user/providers/{id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get a specific AI provider belonging to the current user (includes API key)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI User"
                ],
                "summary": "Get user's AI provider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Update an AI provider belonging to the current user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI User"
                ],
                "summary": "Update user's AI provider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Provider details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.UpdateProviderRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Delete an AI provider belonging to the current user",
                "tags": [
                    "AI User"
                ],
                "summary": "Delete user's AI provider",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/user/providers/{id}/availability": {
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Set availability for a specific usage type (backend/frontend)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI User"
                ],
                "summary": "Set user provider availability",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Provider ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Availability settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.SetAvailabilityRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/vision": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Send a vision-based request (with images) to the AI service for processing",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Send vision request to AI service",
                "parameters": [
                    {
                        "description": "Vision request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.VisionRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.AIResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/ai/vision/support": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Check if the AI service supports vision capabilities with given configuration",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "AI"
                ],
                "summary": "Check vision support",
                "parameters": [
                    {
                        "description": "AI configuration",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ai.AIConfigRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "boolean"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/alfred/messages": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Appends one message to the caller's current Alfred conversation thread (today's), opening the conversation and the daily thread as needed. The optional client_message_id makes retries idempotent. Owner-scoped.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "alfred"
                ],
                "summary": "Send a message to the caller's Alfred",
                "parameters": [
                    {
                        "description": "Message",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_alfred.PostMessageRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_alfred.PostMessageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/alfred/status": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Reports whether the caller's Alfred session is live and which machine it runs on, plus the ids of their ledger and most recent conversation task. Owner-scoped.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "alfred"
                ],
                "summary": "Get the caller's Alfred status",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_alfred.StatusResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/app/info": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get application configuration for the frontend (requires authentication)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "app"
                ],
                "summary": "Get app info",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_appinfo.InfoResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/assignments": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "The assignment roster: who cards are assigned to, and each assignee's most recently updated cards. Scoped to what the caller can read — being someone's assignee never widens what the caller sees. Not paginated.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Assignments"
                ],
                "summary": "List assignments grouped by assignee",
                "operationId": "listAssignments",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Restrict to one assignee (user id)",
                        "name": "assignee",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Restrict to one task id",
                        "name": "task",
                        "in": "query"
                    },
                    {
                        "enum": [
                            "human",
                            "agent"
                        ],
                        "type": "string",
                        "description": "Restrict to one kind of assignee",
                        "name": "type",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Cards per assignee (default 5, max 20)",
                        "name": "limit_per_assignee",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_assignment.RowDTO"
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid query parameter",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/assignments/{task}": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Idempotent upsert of the task→assignee relation. Re-assigning is the same call; repeating it is a no-op with no event. The assignee must be someone the TASK has been given to: its owner, a member of the group it is shared into, or one of its owner's agents. Assignment grants the assignee no access to the task.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Assignments"
                ],
                "summary": "Assign a task to a member",
                "operationId": "assignTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "task",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Assignee",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_assignment.AssignRequestDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Assigned",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Missing assignee",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "403": {
                        "description": "Assignee is not a member the caller may assign to",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Task not found or not writable",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Clears the task→assignee relation. Idempotent: deleting an assignment that does not exist succeeds.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Assignments"
                ],
                "summary": "Cancel a task's assignment",
                "operationId": "unassignTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "task",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Unassigned",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Task not found or not writable",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/account": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Permanently deletes the calling user's account and everything it owns, including content shared with other people. Requires the account password. There is no grace period and no way to undo it.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Delete your own account",
                "operationId": "deleteOwnAccount",
                "parameters": [
                    {
                        "description": "Account password",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.DeleteAccountRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Account deleted",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.DeleteAccountResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request, or the account has no password to confirm with",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Not authenticated, or the password is wrong",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Deletion failed part-way; the account still exists",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/admin/create-user": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new user account with specified username, password, and role. Only accessible by admin users.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Create a new user (Admin only)",
                "operationId": "createUser",
                "parameters": [
                    {
                        "description": "User creation request",
                        "name": "createUserRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.CreateUserRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Successfully created user",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.CreateUserResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request format or validation error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "403": {
                        "description": "Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "409": {
                        "description": "User already exists",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Failed to create user",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/api-keys": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Return a list of all API keys for the authenticated user (without sensitive data)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "List user API keys",
                "operationId": "listApiKeys",
                "responses": {
                    "200": {
                        "description": "Successfully retrieved API keys",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_auth.ApiKeyInfo"
                            }
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Failed to retrieve API keys",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new API key for the authenticated user with specified scopes and optional expiration",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Create API key",
                "operationId": "createApiKey",
                "parameters": [
                    {
                        "description": "API key creation request",
                        "name": "createApiKeyRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.CreateApiKeyRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully created API key",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.CreateApiKeyResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request format or validation error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Failed to create API key",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/api-keys/{keyId}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Revoke (delete) an API key for the authenticated user",
                "tags": [
                    "Authentication"
                ],
                "summary": "Revoke API key",
                "operationId": "revokeApiKey",
                "parameters": [
                    {
                        "type": "string",
                        "description": "API key ID to revoke",
                        "name": "keyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "API key revoked successfully"
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "API key not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Failed to revoke API key",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/avatar": {
            "put": {
                "description": "Update the authenticated user's avatar URL",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Update user avatar",
                "operationId": "updateAvatar",
                "parameters": [
                    {
                        "description": "Avatar update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.UpdateAvatarRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Avatar updated",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.UpdateAvatarResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/oauth/github/authorize": {
            "get": {
                "description": "Generate the GitHub OAuth authorization URL with state for CSRF protection",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Get GitHub OAuth authorization URL",
                "operationId": "getGitHubAuthorize",
                "responses": {
                    "200": {
                        "description": "Authorization URL and state",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GitHubAuthorizeResponse"
                        }
                    },
                    "500": {
                        "description": "OAuth not configured or server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/oauth/github/callback": {
            "post": {
                "description": "Exchange authorization code for tokens and log in or create user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Handle GitHub OAuth callback",
                "operationId": "gitHubCallback",
                "parameters": [
                    {
                        "description": "OAuth callback data",
                        "name": "callbackRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GitHubCallbackRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Login successful or requires linking",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GitHubCallbackResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request or state",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "OAuth failed",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/oauth/github/enabled": {
            "get": {
                "description": "Returns whether GitHub OAuth login is available",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Check if GitHub OAuth is enabled",
                "operationId": "getGitHubEnabled",
                "responses": {
                    "200": {
                        "description": "GitHub OAuth status",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GitHubEnabledResponse"
                        }
                    }
                }
            }
        },
        "/auth/oauth/github/link": {
            "post": {
                "description": "Link GitHub account to existing user by verifying password",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Link GitHub account to existing user",
                "operationId": "gitHubLink",
                "parameters": [
                    {
                        "description": "Link request with state and password",
                        "name": "linkRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GitHubLinkRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful login with linked account",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.LoginV2Response"
                        }
                    },
                    "400": {
                        "description": "Invalid request or linking state",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Invalid password",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "GitHub account already linked to another user",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/oauth/google/authorize": {
            "get": {
                "description": "Generate the Google OAuth authorization URL with state for CSRF protection",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Get Google OAuth authorization URL",
                "operationId": "getGoogleAuthorize",
                "responses": {
                    "200": {
                        "description": "Authorization URL and state",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GoogleAuthorizeResponse"
                        }
                    },
                    "500": {
                        "description": "OAuth not configured or server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/oauth/google/callback": {
            "post": {
                "description": "Exchange authorization code for tokens and log in or create user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Handle Google OAuth callback",
                "operationId": "googleCallback",
                "parameters": [
                    {
                        "description": "OAuth callback data",
                        "name": "callbackRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GoogleCallbackRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Login successful or requires linking",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GoogleCallbackResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request or state",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "OAuth failed",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/oauth/google/enabled": {
            "get": {
                "description": "Returns whether Google OAuth login is available",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Check if Google OAuth is enabled",
                "operationId": "getGoogleEnabled",
                "responses": {
                    "200": {
                        "description": "Google OAuth status",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GoogleEnabledResponse"
                        }
                    }
                }
            }
        },
        "/auth/oauth/google/link": {
            "post": {
                "description": "Link Google account to existing user by verifying password",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Link Google account to existing user",
                "operationId": "googleLink",
                "parameters": [
                    {
                        "description": "Link request with state and password",
                        "name": "linkRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.GoogleLinkRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful login with linked account",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.LoginV2Response"
                        }
                    },
                    "400": {
                        "description": "Invalid request or linking state",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Invalid password",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Google account already linked to another user",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/oauth/providers": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns the list of OAuth providers linked to the current user's account",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OAuth"
                ],
                "summary": "Get linked OAuth providers",
                "operationId": "getLinkedProviders",
                "responses": {
                    "200": {
                        "description": "List of linked OAuth providers",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_auth.LinkedProviderResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/password": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the user's password. If user has existing password, oldPassword is required.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Update password",
                "operationId": "updatePassword",
                "parameters": [
                    {
                        "description": "Password update request",
                        "name": "updatePasswordRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.UpdatePasswordRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Password updated successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.UpdatePasswordResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request or password mismatch",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Authentication required or invalid old password",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/password/status": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Check if the authenticated user has a password set (useful for OAuth-only users)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Get password status",
                "operationId": "getPasswordStatus",
                "responses": {
                    "200": {
                        "description": "Password status",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.PasswordStatusResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/profile": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns current user profile information extracted from JWT token",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Get current user profile",
                "operationId": "getProfile",
                "responses": {
                    "200": {
                        "description": "User profile information",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.ProfileResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/refresh-token": {
            "post": {
                "description": "Generate new access and refresh tokens using a valid refresh token",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Refresh access token",
                "operationId": "refreshToken",
                "parameters": [
                    {
                        "description": "Refresh token request",
                        "name": "refreshRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.RefreshTokenRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully refreshed tokens",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.RefreshTokenResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request format",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Invalid or expired refresh token",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/register": {
            "post": {
                "description": "Register a new user account with username, password and invite code validation",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "User registration with invite code",
                "operationId": "register",
                "parameters": [
                    {
                        "description": "Registration credentials",
                        "name": "registerRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.RegisterRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Registration successful",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.RegisterResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request format or validation error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Invalid invite code",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/auth/tier-info": {
            "get": {
                "description": "Get current subscription tier and default credentials for Personal tier. This is a public endpoint for the login page.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "Get tier information (Public)",
                "operationId": "getTierInfo",
                "responses": {
                    "200": {
                        "description": "Tier information",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.TierInfoResponse"
                        }
                    }
                }
            }
        },
        "/auth/v2/login": {
            "post": {
                "description": "Authenticate user with username and password, return JWT tokens and user info",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Authentication"
                ],
                "summary": "User login with JSON response",
                "operationId": "loginV2",
                "parameters": [
                    {
                        "description": "Login credentials",
                        "name": "loginRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.SignInRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful login with tokens and user info",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.LoginV2Response"
                        }
                    },
                    "400": {
                        "description": "Invalid request format",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Invalid credentials",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/backup/download/{job_id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get a presigned download URL for a completed backup",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "backup"
                ],
                "summary": "Download backup file",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Backup Job ID",
                        "name": "job_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_backup.BackupDownloadResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/backup/list": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get a list of all backup jobs for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "backup"
                ],
                "summary": "List backup jobs",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_backup.BackupListResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/backup/status/{job_id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get the status and details of a backup job by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "backup"
                ],
                "summary": "Get backup job status",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Backup Job ID",
                        "name": "job_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_backup.ManualBackupResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/backup/trigger": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Trigger a manual backup of the database files with an optional custom filename",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "backup"
                ],
                "summary": "Trigger a manual backup",
                "parameters": [
                    {
                        "description": "Backup request with optional filename",
                        "name": "request",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_backup.ManualBackupRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_backup.ManualBackupResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/budget": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all budgets for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Get user budgets",
                "operationId": "getUserBudgets",
                "parameters": [
                    {
                        "type": "boolean",
                        "description": "Include hidden budgets",
                        "name": "includeHidden",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "properties": {
                                "budgets": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                                    }
                                },
                                "count": {
                                    "type": "integer"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new budget for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Create a new budget",
                "operationId": "createBudget",
                "parameters": [
                    {
                        "description": "Budget creation data",
                        "name": "budget",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.CreateBudgetDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/budget-with-expenses": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all user budgets with their associated expenses and spending metrics",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Get all budgets with expenses",
                "operationId": "getAllBudgetsWithExpenses",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Month in YYYY-MM format (default: current month)",
                        "name": "month",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.BudgetWithExpensesResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/budget-with-expenses/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a single budget with all associated expenses and spending metrics",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Get budget with expenses",
                "operationId": "getBudgetWithExpenses",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Month in YYYY-MM format (default: current month)",
                        "name": "month",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.BudgetWithExpensesResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Budget not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a specific budget by its ID for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Get budget by ID",
                "operationId": "getBudgetByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a budget for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Delete budget",
                "operationId": "deleteBudget",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "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"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update budget name and hidden status for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Update budget",
                "operationId": "updateBudget",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Budget update data",
                        "name": "budget",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.UpdateBudgetDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}/adjustments": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all one-time adjustments for a specific budget",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budget-adjustments"
                ],
                "summary": "Get one-time adjustments",
                "operationId": "getOneTimeAdjustments",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "properties": {
                                "adjustments": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/definitions/internal_adapter_web_budget.OneTimeAdjustmentDTO"
                                    }
                                },
                                "count": {
                                    "type": "integer"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Add a one-time adjustment to a budget",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budget-adjustments"
                ],
                "summary": "Add one-time adjustment",
                "operationId": "addOneTimeAdjustment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "One-time adjustment data",
                        "name": "adjustment",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.CreateOneTimeAdjustmentDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}/ledger": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a chronological ledger of all events affecting the budget total up to a reference date",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Get budget projection ledger",
                "operationId": "getBudgetLedger",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Reference date in RFC3339 format (defaults to today)",
                        "name": "referenceDate",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.LedgerResponseDTO"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}/plans": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all plans for a specific budget",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budget-plans"
                ],
                "summary": "Get budget plans",
                "operationId": "getBudgetPlans",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "properties": {
                                "count": {
                                    "type": "integer"
                                },
                                "plans": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/definitions/internal_adapter_web_budget.BudgetPlanResponseDTO"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Add a new budget plan to an existing budget",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budget-plans"
                ],
                "summary": "Add budget plan",
                "operationId": "addBudgetPlan",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Budget plan data",
                        "name": "plan",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.CreateBudgetPlanDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update group sharing settings for a budget (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "budgets"
                ],
                "summary": "Share budget to group",
                "operationId": "shareBudgetToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group sharing settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.ShareToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_budget.BudgetResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Budget not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}/share-link": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Generate an invitation link to share a budget with other users",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Budget Sharing"
                ],
                "summary": "Create a share link for a budget",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Share link options",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_invitation.CreateShareLinkRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_invitation.ShareLinkResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/budget/{id}/share-links": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all active share links for a budget",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Budget Sharing"
                ],
                "summary": "List share links for a budget",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Budget ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_invitation.ShareLinkListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/cash-flow": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Aggregate income and expenses by month, grouped by currency",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "CashFlow"
                ],
                "summary": "Get cash flow aggregation",
                "operationId": "getCashFlow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Month in YYYY-MM format (default: current month)",
                        "name": "month",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Number of months for trend data (default: 6)",
                        "name": "trend_months",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_cash_flow.CashFlowResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all diagrams accessible to the authenticated user. Pass name (and optionally path) to resolve the apply idempotency key, or entityId to list what is attached to an entity.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "List dataflow diagrams",
                "operationId": "getUserDataflows",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resolve one diagram by its (owner, path, name) key",
                        "name": "name",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Folder for the name lookup; defaults to /",
                        "name": "path",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "List the diagrams attached to this entity instead",
                        "name": "entityId",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Entity type for the attachment lookup; defaults to todolist",
                        "name": "entityType",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a diagram. The graph JSON is stored verbatim; images must be resource:// references, never inlined.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Create a dataflow diagram",
                "operationId": "createDataflow",
                "parameters": [
                    {
                        "description": "Diagram creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.CreateDataflowDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "409": {
                        "description": "A diagram with this name already exists in this folder",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Get a dataflow diagram",
                "operationId": "getDataflowById",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResponseDTO"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Re-sending identical content is a no-op: nothing is written, updatedAt does not move, and no version is recorded.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Update a dataflow diagram",
                "operationId": "updateDataflow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Fields to change",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.UpdateDataflowDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Owner only. The diagram's version history goes with it.",
                "tags": [
                    "Dataflow"
                ],
                "summary": "Delete a dataflow diagram",
                "operationId": "deleteDataflow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Deleted"
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}/histories": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Newest first, without content. Each entry says whether it can still be restored, and why not when it cannot.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "List a diagram's versions",
                "operationId": "getDataflowHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowVersionListResponseDTO"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}/histories/{historyId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Read one stored version in full",
                "operationId": "getDataflowVersion",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Version ID",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowVersionContentDTO"
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Owner only, matching how task description history behaves.",
                "tags": [
                    "Dataflow"
                ],
                "summary": "Delete one stored version",
                "operationId": "deleteDataflowVersion",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Version ID",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Deleted"
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}/histories/{historyId}/rollback": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Restoring re-applies that version as a new write: the versions in between stay, and the version being replaced becomes history like any other. Nothing is erased. The restored content is re-validated against today's rules.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Restore a stored version",
                "operationId": "rollbackDataflow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Version ID to restore",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResponseDTO"
                        }
                    },
                    "400": {
                        "description": "This version no longer satisfies the current diagram rules",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}/links": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Owner only. Attaching the same diagram to the same entity twice is one attachment, not an error.",
                "consumes": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Attach a diagram to an entity",
                "operationId": "attachDataflow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "What to attach it to",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowLinkDTO"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Attached"
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Owner only. The diagram itself is untouched — only the attachment goes.",
                "tags": [
                    "Dataflow"
                ],
                "summary": "Detach a diagram from an entity",
                "operationId": "detachDataflow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Entity type, e.g. todolist",
                        "name": "entityType",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Entity ID",
                        "name": "entityId",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Detached"
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}/resources/{resourceId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Resolves an image through the diagram that references it, instead of through the image's own permissions. Whoever can read the diagram can read the pictures inside it, and only those; the image's own row, its sharing state and its visibility everywhere else are untouched. Unsharing the diagram takes the access away on the next request, because nothing was granted in the first place.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Get a download URL for an image referenced by a diagram",
                "operationId": "resolveDataflowResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Referenced resource ID",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Resolve against this stored version instead of the current content",
                        "name": "historyId",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResourceURLDTO"
                        }
                    },
                    "403": {
                        "description": "This diagram does not reference that resource",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Diagram not found, or the image is no longer available",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/dataflows/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Owner only. Sharing does not touch the images the diagram references — those are read through the diagram, so unsharing takes their access away on the next request with nothing to revoke.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Dataflow"
                ],
                "summary": "Share a diagram with a group",
                "operationId": "shareDataflowToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Diagram ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Share settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.ShareDataflowDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "403": {
                        "description": "Not a member of that group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/entity/{uuid}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get any type of entity (task, budget, expense, resource file, kanban board) by its UUID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Entity Lookup"
                ],
                "summary": "Get any entity by UUID",
                "operationId": "getEntityByUUID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Entity UUID",
                        "name": "uuid",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_entity_lookup.EntityResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Entity not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/events/stream": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Opens a long-lived SSE connection to receive real-time domain events",
                "produces": [
                    "text/event-stream"
                ],
                "tags": [
                    "Events"
                ],
                "summary": "Stream events via Server-Sent Events",
                "operationId": "streamEvents",
                "responses": {
                    "200": {
                        "description": "SSE stream",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/expense": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all expenses belonging to the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense"
                ],
                "summary": "Get all user expenses",
                "operationId": "getUserExpenses",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.ExpenseListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new expense for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense"
                ],
                "summary": "Create a new expense",
                "operationId": "createExpense",
                "parameters": [
                    {
                        "description": "Expense creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.CreateExpenseDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.ExpenseResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/expense-from-text": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Parse free text using AI and create a structured expense. The AI will extract amount, currency, title, and optionally match to a budget.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense"
                ],
                "summary": "Create expense from free text",
                "operationId": "createExpenseFromText",
                "parameters": [
                    {
                        "description": "Free text to parse",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense_from_text.CreateFromTextDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense_from_text.CreateFromTextResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/expense-from-vision/process-task/{taskId}": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Process a specific image task by its ID using AI vision",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense from Vision"
                ],
                "summary": "Manually trigger processing of a specific task",
                "operationId": "processExpenseVisionTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "taskId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense_from_vision.ProcessTaskResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/expense-from-vision/upload": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Upload an image file that will be processed using AI vision to extract expense information",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense from Vision"
                ],
                "summary": "Upload an image for expense processing using AI vision",
                "operationId": "uploadImageForExpenseVisionProcessing",
                "parameters": [
                    {
                        "type": "file",
                        "description": "Image file to upload",
                        "name": "image",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense_from_vision.UploadImageResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/expense/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a specific expense by its ID with optional presigned file URL",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense"
                ],
                "summary": "Get a specific expense by ID",
                "operationId": "getExpenseByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Expense ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.ExpenseResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Expense not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing expense by its ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense"
                ],
                "summary": "Update an existing expense",
                "operationId": "updateExpense",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Expense ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Expense update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.UpdateExpenseDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.ExpenseResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Expense not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete an expense by its ID (soft delete by hiding it)",
                "tags": [
                    "Expense"
                ],
                "summary": "Delete an expense",
                "operationId": "deleteExpense",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Expense ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Expense not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/expense/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update group sharing settings for an expense (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense"
                ],
                "summary": "Share expense to group",
                "operationId": "shareExpenseToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Expense ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group sharing settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.ShareToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense.ExpenseResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Expense not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/expenses/from-resource/{resourceId}": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Use an already uploaded image resource to create an expense with AI vision processing",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Expense from Vision"
                ],
                "summary": "Create an expense from an existing resource",
                "operationId": "createExpenseFromResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_expense_from_vision.UploadImageResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/explorer": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns lightweight items from all entity types for the explorer tree view. Supports incremental sync and virtual-path subtree filtering.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Explorer"
                ],
                "summary": "Get unified explorer items",
                "operationId": "getUnifiedExplorerItems",
                "parameters": [
                    {
                        "type": "string",
                        "description": "RFC3339 timestamp for incremental sync (e.g. 2026-06-17T09:00:00Z)",
                        "name": "since",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Virtual path prefix filter (e.g. /Work/Alpha/). Returns items at that path and below. Unfiled items (no path) are excluded.",
                        "name": "path",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_explorer.UnifiedExplorerResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/feel-lucky/generate": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Randomly pick notes from user's knowledge base, use AI to generate insights and reading suggestions, and create a new task with the result.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "FeelLucky"
                ],
                "summary": "Generate knowledge exploration task",
                "operationId": "generateFeelLucky",
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_feel_lucky.FeelLuckyResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/groups": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Create a new group",
                "parameters": [
                    {
                        "description": "Group creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.CreateGroupRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.GroupResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "User already in a group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/invites/{token}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Get invite info",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invite token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.InviteInfoResponse"
                        }
                    },
                    "404": {
                        "description": "Invite not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "groups"
                ],
                "summary": "Revoke invite link",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invite token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "403": {
                        "description": "Not the group owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Invite not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/invites/{token}/accept": {
            "post": {
                "tags": [
                    "groups"
                ],
                "summary": "Accept invite and join group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invite token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.GroupResponse"
                        }
                    },
                    "400": {
                        "description": "Invite expired or already used",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Invite not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Already in this group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/my": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Get current user's groups",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_group.GroupWithMembersResponse"
                            }
                        }
                    }
                }
            }
        },
        "/groups/{id}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Get group by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.GroupWithMembersResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Update group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.UpdateGroupRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.GroupResponse"
                        }
                    },
                    "403": {
                        "description": "Not the group owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "groups"
                ],
                "summary": "Delete group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "403": {
                        "description": "Not the group owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/{id}/invites": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Get group invites",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_group.GroupInviteResponse"
                            }
                        }
                    },
                    "403": {
                        "description": "Not the group owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Group not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Create invite link",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Create invite request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.CreateInviteRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.GroupInviteResponse"
                        }
                    },
                    "403": {
                        "description": "Not the group owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Group not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/{id}/leave": {
            "post": {
                "tags": [
                    "groups"
                ],
                "summary": "Leave a group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "400": {
                        "description": "Owner cannot leave",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not in this group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/{id}/members": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Get group members",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_group.GroupMemberResponse"
                            }
                        }
                    },
                    "403": {
                        "description": "Not a member",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "groups"
                ],
                "summary": "Add member to group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Add member request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_group.AddMemberRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created"
                    },
                    "400": {
                        "description": "Neither user_id nor identifier given",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Caller does not manage this group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "No such group, or no such user",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "User already in this group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/groups/{id}/members/{userId}": {
            "delete": {
                "tags": [
                    "groups"
                ],
                "summary": "Remove member from group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Group ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "userId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "403": {
                        "description": "Not the group owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/im-links": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "im-links"
                ],
                "summary": "List linked IM accounts",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_imlink.IdentityListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/im-links/code": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "im-links"
                ],
                "summary": "Generate an IM link code",
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_imlink.LinkCodeResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/im-links/{id}": {
            "delete": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "im-links"
                ],
                "summary": "Unlink an IM account",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Identity ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/im/bot": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns the caller's own bot (or null), plus whether this instance can store tokens, is at its bot limit, and admits this user. Never returns the token.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "im-bot"
                ],
                "summary": "Get the caller's messenger bot",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Messenger name (default: telegram)",
                        "name": "provider",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_imbot.BotStatusResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Verifies the token against the messenger (getMe) and stores it encrypted. Nothing is stored if verification fails. The token is never returned.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "im-bot"
                ],
                "summary": "Set or replace the caller's bot token",
                "parameters": [
                    {
                        "description": "Bot token",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_imbot.SetTokenRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_imbot.BotResponse"
                        }
                    },
                    "400": {
                        "description": "Token rejected by the messenger, or missing",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "409": {
                        "description": "Instance bot limit reached",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Stops the bot's connection and deletes its stored token. The messenger binding and conversation history are left untouched.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "im-bot"
                ],
                "summary": "Remove the caller's bot",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Messenger name (default: telegram)",
                        "name": "provider",
                        "in": "query"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "The caller has no bot for this messenger",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/income": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all visible incomes belonging to the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Income"
                ],
                "summary": "Get all user incomes",
                "operationId": "getUserIncomes",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.IncomeListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new income for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Income"
                ],
                "summary": "Create a new income",
                "operationId": "createIncome",
                "parameters": [
                    {
                        "description": "Income creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.CreateIncomeDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.IncomeResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/income/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a specific income by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Income"
                ],
                "summary": "Get a specific income by ID",
                "operationId": "getIncomeByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Income ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.IncomeResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Income not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing income by its ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Income"
                ],
                "summary": "Update an existing income",
                "operationId": "updateIncome",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Income ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Income update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.UpdateIncomeDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.IncomeResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Income not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete an income by its ID (soft delete by hiding it)",
                "tags": [
                    "Income"
                ],
                "summary": "Delete an income",
                "operationId": "deleteIncome",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Income ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Income not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/income/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update group sharing settings for an income (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Income"
                ],
                "summary": "Share income to group",
                "operationId": "shareIncomeToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Income ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group sharing settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.ShareToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_income.IncomeResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Income not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/invite-code": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Generate a new unique 6-character uppercase invite code for user registration",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Invite Codes"
                ],
                "summary": "Generate new invite code",
                "operationId": "generateInviteCode",
                "responses": {
                    "200": {
                        "description": "Successfully generated invite code",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.InviteCodeResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Failed to generate invite code",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/invite-code/unused": {
            "get": {
                "description": "Return an existing unused invite code or generate new one if none exists (Public endpoint)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Invite Codes"
                ],
                "summary": "Get unused invite code",
                "operationId": "getUnusedInviteCode",
                "responses": {
                    "200": {
                        "description": "Successfully retrieved or generated unused invite code",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.InviteCodeResponse"
                        }
                    },
                    "500": {
                        "description": "Failed to get unused invite code",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/kanban/ai/refine": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Refines user input text to be more clear, concise, and professional",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Refine text using AI",
                "parameters": [
                    {
                        "description": "Refine text request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.RefineTextRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.RefineTextResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/kanban/boards": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "List user's boards",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardListResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a board. Column actions with source=query are derived server-side from each column's query. Pass dry_run=true to preview the board without persisting — the response is then a BoardPreviewResponse ({dry_run, would_create_group, board}) with HTTP 200.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Create a new Kanban board",
                "parameters": [
                    {
                        "description": "Board creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.CreateBoardRequest"
                        }
                    },
                    {
                        "type": "boolean",
                        "description": "Preview the board without creating it (returns BoardPreviewResponse)",
                        "name": "dry_run",
                        "in": "query"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/kanban/boards/default": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Ensure default board exists",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                        }
                    }
                }
            }
        },
        "/kanban/boards/preview-actions": {
            "post": {
                "description": "Returns the actions that would be auto-generated (source=query) for the given column query. Used by clients to preview drag-drop behavior before saving a board.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Preview auto-generated column actions for a query",
                "parameters": [
                    {
                        "description": "Column query",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.PreviewColumnActionsRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.PreviewColumnActionsResponse"
                        }
                    }
                }
            }
        },
        "/kanban/boards/{id}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Get board by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Update board",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Board update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.UpdateBoardRequest"
                        }
                    },
                    {
                        "type": "boolean",
                        "description": "Preview the update without persisting it (returns BoardPreviewResponse: {dry_run, board})",
                        "name": "dry_run",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                        }
                    },
                    "403": {
                        "description": "Not the board owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "description": "Deletes a board and its associated group. Tasks shared with the board's group will become private to their owners.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Delete board",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "403": {
                        "description": "Not the board owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/kanban/boards/{id}/query": {
            "post": {
                "description": "Query tasks within a board using the board's service user scope. Supports the same query syntax as /todolist/query.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Query board tasks",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Query request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.QueryBoardTasksRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.QueryBoardTasksResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/kanban/boards/{id}/share": {
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Share board with a group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Share board request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.ShareBoardRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                        }
                    },
                    "403": {
                        "description": "Not the board owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Unshare board",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                        }
                    },
                    "403": {
                        "description": "Not the board owner",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/kanban/boards/{id}/tasks": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Get board tasks",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.BoardTasksResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "kanban"
                ],
                "summary": "Create task in board",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Board ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Create task request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_kanban.CreateTaskInBoardRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "403": {
                        "description": "No write access",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/license/decode": {
            "get": {
                "description": "Decode and display the payload of a license (without full validation)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "License"
                ],
                "summary": "Decode a license payload",
                "operationId": "decodeLicense",
                "parameters": [
                    {
                        "type": "string",
                        "description": "License string to decode",
                        "name": "license",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully decoded license",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_license_gen.DecodeResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid license format",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/license/generate": {
            "post": {
                "description": "Generate a new license with the provided user secret and optional details",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "License"
                ],
                "summary": "Generate a new license",
                "operationId": "generateLicense",
                "parameters": [
                    {
                        "description": "License generation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_license_gen.GenerateRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully generated license",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_license_gen.GenerateResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "License generation failed",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/license/info": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get current subscription tier and license details (if available)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "License"
                ],
                "summary": "Get license and tier information",
                "operationId": "getLicenseInfo",
                "responses": {
                    "200": {
                        "description": "License information",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_auth.LicenseInfoResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/metrics/download": {
            "post": {
                "description": "Record a download event for metrics tracking",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Metrics"
                ],
                "summary": "Track app download",
                "parameters": [
                    {
                        "description": "Download tracking request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_download_metrics.TrackDownloadRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Download tracked successfully"
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/notes/{noteId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a note by its ID without requiring the task ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Notes"
                ],
                "summary": "Get a note by ID",
                "operationId": "getNoteByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NoteResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Note not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a note by its ID without requiring the task ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Notes"
                ],
                "summary": "Update a note by ID",
                "operationId": "updateNoteByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Note update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.UpdateNoteDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NoteResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Note not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a note by its ID without requiring the task ID",
                "tags": [
                    "Notes"
                ],
                "summary": "Delete a note by ID",
                "operationId": "deleteNoteByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Note not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/notifications": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Notification"
                ],
                "summary": "List notifications",
                "parameters": [
                    {
                        "type": "integer",
                        "default": 1,
                        "description": "Page number",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 20,
                        "description": "Page size",
                        "name": "pageSize",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/notifications/read-all": {
            "put": {
                "tags": [
                    "Notification"
                ],
                "summary": "Mark all notifications as read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/notifications/unread-count": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Notification"
                ],
                "summary": "Get unread notification count",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/notifications/{id}/read": {
            "put": {
                "tags": [
                    "Notification"
                ],
                "summary": "Mark notification as read",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Notification ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/oauth/callback/google": {
            "get": {
                "description": "Backend endpoint that Google redirects to, then redirects browser to frontend",
                "tags": [
                    "OAuth"
                ],
                "summary": "Handle Google OAuth redirect",
                "operationId": "googleRedirectHandler",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Authorization code from Google",
                        "name": "code",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "State for CSRF protection",
                        "name": "state",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "302": {
                        "description": "Redirect to frontend with OAuth params"
                    },
                    "400": {
                        "description": "Missing code or state",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/onboarding/config": {
            "get": {
                "description": "Returns admin-configured onboarding settings like landing page",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Onboarding"
                ],
                "summary": "Get onboarding config",
                "operationId": "getOnboardingConfig",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.OnboardingConfigResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/onboarding/create-visitor-account": {
            "post": {
                "description": "Creates a new visitor account with email pattern visitor_\u003cuuid\u003e@example.com. Preset data is generated post-login via onboarding dialog.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Onboarding"
                ],
                "summary": "Create a visitor account",
                "operationId": "createVisitorAccount",
                "parameters": [
                    {
                        "description": "Optional language preference",
                        "name": "request",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.CreateVisitorAccountRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.VisitorAccountResponse"
                        }
                    },
                    "429": {
                        "description": "Rate limit exceeded",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/onboarding/seed": {
            "post": {
                "description": "Creates a shared welcome board with one localized welcome task for the authenticated user. Called after the user selects a language in the onboarding dialog. Idempotent — re-running does not duplicate.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Onboarding"
                ],
                "summary": "Seed welcome data",
                "operationId": "seedWelcomeData",
                "parameters": [
                    {
                        "description": "Language preference",
                        "name": "request",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.SeedWelcomeRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.SeedWelcomeResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_onboarding.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/possession": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all possessions accessible to the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Get all user possessions",
                "operationId": "getUserPossessions",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.PossessionListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a possession. Omit acquiredAt to create a wish (wanted, not bought yet).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Create a new possession",
                "operationId": "createPossession",
                "parameters": [
                    {
                        "description": "Possession creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.CreatePossessionDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/possession/summary": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Per-currency totals plus counts. Pass ?currency= to also request a\ndisplay-only single-currency roll-up; check conversionUnavailable and\nconverted.missingRates before presenting it as complete.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Get the possession overview",
                "operationId": "getPossessionSummary",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Display currency for the optional roll-up",
                        "name": "currency",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.SummaryResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/possession/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Get a possession by ID",
                "operationId": "getPossessionByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Possession ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update descriptive and cost fields. Lifecycle changes use /acquire and /dispose.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Update a possession",
                "operationId": "updatePossession",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Possession ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Possession update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.UpdatePossessionDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Delete a possession",
                "operationId": "deletePossession",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Possession ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/possession/{id}/acquire": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Marks a wished-for item as bought, starting its holding period.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Move a wish into service",
                "operationId": "acquirePossession",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Possession ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Acquisition data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.AcquireDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request — not in wish state",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/possession/{id}/dispose": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Marks a possession retired, sold or lost. This is one-way: re-acquiring\nthe same item creates a new possession with its own holding period.\nProceeds are only valid with status \"sold\" and must use the same currency as cost.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "End a possession's holding period",
                "operationId": "disposePossession",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Possession ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Disposal data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.DisposeDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.DisposeResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request — bad transition, date or currency",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/possession/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Possession"
                ],
                "summary": "Share a possession with a group",
                "operationId": "sharePossessionToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Possession ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Share settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.ShareToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/preference": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve user's preference settings as flexible JSON",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Preferences"
                ],
                "summary": "Get user preferences",
                "operationId": "getPreferences",
                "responses": {
                    "200": {
                        "description": "User preferences retrieved successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_preference.PreferenceResponse"
                        }
                    },
                    "404": {
                        "description": "Preferences not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create or update user preferences using upsert operation",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Preferences"
                ],
                "summary": "Create or update user preferences",
                "operationId": "upsertPreferences",
                "parameters": [
                    {
                        "description": "Preference settings to upsert",
                        "name": "upsertRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_preference.UpsertPreferenceRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Preferences upserted successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_preference.UpsertPreferenceResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request format",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Remove all user preferences",
                "tags": [
                    "Preferences"
                ],
                "summary": "Delete user preferences",
                "operationId": "deletePreferences",
                "responses": {
                    "204": {
                        "description": "Preferences deleted successfully"
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a specific nested key within preferences using dot notation",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Preferences"
                ],
                "summary": "Patch user preferences",
                "operationId": "patchPreferences",
                "parameters": [
                    {
                        "description": "Key-value pair to patch",
                        "name": "patchRequest",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_preference.PatchPreferenceRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Preferences patched successfully",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_preference.UpsertPreferenceResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request format",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/preference/exists": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Check if user has any preferences configured",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Preferences"
                ],
                "summary": "Check if preferences exist",
                "operationId": "preferencesExist",
                "responses": {
                    "200": {
                        "description": "Preferences existence status",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "boolean"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/projects": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "projects"
                ],
                "summary": "List projects",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.ProjectListResponse"
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "projects"
                ],
                "summary": "Create a new project",
                "parameters": [
                    {
                        "description": "Project creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.CreateProjectRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.ProjectResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/projects/{id}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "projects"
                ],
                "summary": "Get project by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.ProjectResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "projects"
                ],
                "summary": "Update project",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Project update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.UpdateProjectRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.ProjectResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "projects"
                ],
                "summary": "Delete project",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/projects/{id}/tasks": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "projects"
                ],
                "summary": "List tasks linked to a project",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_project.ProjectTasksResponse"
                        }
                    }
                }
            }
        },
        "/prompts": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "prompts"
                ],
                "summary": "List workspace prompts",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_prompt.PromptListResponse"
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "prompts"
                ],
                "summary": "Create a new workspace prompt",
                "parameters": [
                    {
                        "description": "Prompt creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_prompt.CreatePromptRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_prompt.PromptResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/prompts/{id}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "prompts"
                ],
                "summary": "Get a workspace prompt",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Prompt ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_prompt.PromptResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "prompts"
                ],
                "summary": "Update a workspace prompt",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Prompt ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Prompt update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_prompt.UpdatePromptRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_prompt.PromptResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "prompts"
                ],
                "summary": "Delete a workspace prompt",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Prompt ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/queue/pending": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all pending tasks for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Queue"
                ],
                "summary": "Get all pending tasks",
                "operationId": "getPendingQueueTasks",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter by task type",
                        "name": "taskType",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.MultipleTasksResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/queue/task": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new task in the queue for processing",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Queue"
                ],
                "summary": "Create a new task in the queue",
                "operationId": "createQueueTask",
                "parameters": [
                    {
                        "description": "Task creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.CreateQueueTaskDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.SingleTaskResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/queue/task/{taskId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get a specific task by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Queue"
                ],
                "summary": "Get a task by ID",
                "operationId": "getQueueTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "taskId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.SingleTaskResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Task not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/queue/task/{taskId}/retry": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retry a failed task by resetting its status to pending",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Queue"
                ],
                "summary": "Retry a failed task",
                "operationId": "retryQueueTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "taskId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.TaskStatusUpdateResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Task not retryable",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Task not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/queue/task/{taskId}/status": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the status and result of a specific task",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Queue"
                ],
                "summary": "Update task status",
                "operationId": "updateQueueTaskStatus",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "taskId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Status update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.UpdateTaskStatusDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.TaskStatusUpdateResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/queue/tasks": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get tasks for the authenticated user with optional filters",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Queue"
                ],
                "summary": "Get tasks with filters",
                "operationId": "getQueueTasks",
                "parameters": [
                    {
                        "description": "Query filters",
                        "name": "query",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.QueueTasksQueryDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_queue.MultipleTasksResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/quick-capture/from-resource/{resourceId}": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Use an already uploaded image resource; AI vision classifies it as an expense, an income, or a task",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Quick Capture"
                ],
                "summary": "Classify an already uploaded image and record what it contains",
                "operationId": "createQuickCaptureFromResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_quick_capture.UploadResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/quick-capture/upload": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Upload an image file; AI vision classifies it and records it as an expense, an income, or a task",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Quick Capture"
                ],
                "summary": "Upload an image and let AI decide whether it is an expense, an income or a task",
                "operationId": "uploadImageForQuickCapture",
                "parameters": [
                    {
                        "type": "file",
                        "description": "Image file to upload",
                        "name": "image",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_quick_capture.UploadResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/resources": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "List all resources for the authenticated user with optional filters",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "List resources",
                "operationId": "listResources",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter by entity type",
                        "name": "entityType",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by entity ID",
                        "name": "entityId",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by upload date from (YYYY-MM-DD)",
                        "name": "dateFrom",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by upload date to (YYYY-MM-DD)",
                        "name": "dateTo",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Search by filename",
                        "name": "search",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by tags (comma-separated)",
                        "name": "tags",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by virtual folder path",
                        "name": "path",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Sort field: file_name, file_size, uploaded_at, created_at, updated_at (default: uploaded_at)",
                        "name": "sortBy",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Sort order: asc, desc (default: desc)",
                        "name": "sortOrder",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page number (default: 1)",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Items per page (default: 50, max: 100)",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ListResourcesResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new resource record for an uploaded file",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Create a resource record",
                "operationId": "createResource",
                "parameters": [
                    {
                        "description": "Resource details",
                        "name": "resource",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.CreateResourceRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete multiple resources and their associated files from storage",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Delete multiple resources",
                "operationId": "deleteResources",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Comma-separated resource IDs",
                        "name": "ids",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deletion results",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/batch-move": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Move all resources from one path prefix to another (for moving folders)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Batch move resources by path prefix",
                "operationId": "batchMoveResources",
                "parameters": [
                    {
                        "description": "Old and new path prefixes",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.BatchMoveRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Resources moved",
                        "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"
                            }
                        }
                    }
                }
            }
        },
        "/resources/batch/move": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Move multiple resources by their IDs to a specified target path",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Batch move resources to a target path",
                "operationId": "batchMoveResourcesTo",
                "parameters": [
                    {
                        "description": "Resource IDs and target path",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.BatchMoveToRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Move results",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/resources/dirs": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "List virtual directories under a given path",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "List directories",
                "operationId": "listDirs",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Parent path (default: /)",
                        "name": "path",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ListDirsResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a virtual directory (creates an empty placeholder resource)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Create a virtual directory",
                "operationId": "createDir",
                "parameters": [
                    {
                        "description": "Directory details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.CreateDirRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.DirEntryResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/resources/folders/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Share a folder resource with a group, cascading to all files under that path",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Share folder to group",
                "operationId": "shareFolderToGroup",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Folder resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group sharing settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ShareFolderToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Folder shared successfully",
                        "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": "Folder not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Conflict - ancestor or descendant folder shared to different group",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Remove group sharing from a folder and all files under that path",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Unshare folder from group",
                "operationId": "unshareFolder",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Folder resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Folder unshared successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Folder not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/pending": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "List resources in pending or failed status for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "List pending resources",
                "operationId": "listPendingResources",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ListResourcesResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/quota": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get the user's quota limits and current storage usage",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Get user quota info",
                "operationId": "getQuotaInfo",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.QuotaInfoResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/stats": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get storage statistics for the authenticated user's resources",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Get resource statistics",
                "operationId": "getResourceStats",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceStatsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/upload": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a resource record and generate presigned upload URL. Automatically inherits group settings from the linked entity.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Prepare resource upload",
                "operationId": "prepareResourceUpload",
                "parameters": [
                    {
                        "description": "Upload preparation details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.PrepareUploadRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.PrepareUploadResponse"
                        }
                    },
                    "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"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get details of a specific resource including presigned download URL",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Get resource details",
                "operationId": "getResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a resource and its associated file from storage",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Delete a resource",
                "operationId": "deleteResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Resource deleted successfully"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/confirm": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update resource status after successful upload",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Confirm resource upload",
                "operationId": "confirmResourceUpload",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Upload confirmed",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/content": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the content of an existing resource (e.g., for editing drawio files)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Update resource content",
                "operationId": "updateResourceContent",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "New content (base64 encoded)",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.UpdateResourceContentRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/content/confirm-swap": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Verify the uploaded object exists at the prepared size, then point the file at it and keep the replaced version. Refuses without touching the file if the upload did not complete.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Confirm a content replacement",
                "operationId": "confirmContentSwap",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ContentSwapResultResponse"
                        }
                    },
                    "400": {
                        "description": "The upload did not complete",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "No swap prepared",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/content/prepare-swap": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Reserve quota and get a presigned upload URL for a NEW storage key. The file is not modified.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Prepare a content replacement",
                "operationId": "prepareContentSwap",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Size and type of the replacement content",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.PrepareContentSwapRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.PrepareContentSwapResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "413": {
                        "description": "Quota exceeded",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/entity": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Remove a specific entity association from a resource (e.g., detach attachment from task)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Unlink resource from entity",
                "operationId": "unlinkResourceFromEntity",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Entity to unlink from",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.UnlinkEntityRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the entity type and ID for a resource (e.g., attach existing resource to a task)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Update resource entity association",
                "operationId": "updateResourceEntity",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Entity association details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.UpdateResourceEntityRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/histories": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Every version of this file's content that has been replaced, oldest first, each with a download URL. These bytes count against the storage quota and appear in no file listing.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "List a file's replaced versions",
                "operationId": "listResourceContentVersions",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ListContentVersionsResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/histories/{historyId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "One replaced version of this file, with a presigned download URL for its original bytes.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Get one replaced version",
                "operationId": "getResourceContentVersion",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Version ID",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_support_resource.ContentHistoryVersion"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "No such version of this file",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Permanently remove a replaced version and its bytes, freeing the quota they hold. Owner only.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Delete one replaced version",
                "operationId": "deleteResourceContentVersion",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Version ID",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Deleted"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "No such version of this file",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/metadata": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the metadata of a resource (merge with existing metadata)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Update resource metadata",
                "operationId": "updateResourceMetadata",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Metadata to merge",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.UpdateResourceMetadataRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Metadata updated",
                        "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": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/name": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Change the display name of a resource (does not affect storage key)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Rename a resource",
                "operationId": "renameResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "New name",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.RenameResourceRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/path": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Move a resource to a different virtual folder path",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Move resource to a new path",
                "operationId": "moveResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "New path",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.MoveResourceRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/tags": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update the tags for a resource",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Update resource tags",
                "operationId": "updateResourceTags",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "New tags",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.UpdateResourceTagsRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Resource not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/resources/{id}/to-markdown": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Use AI vision to extract content from an image and return it as markdown",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Resources"
                ],
                "summary": "Convert image resource to markdown",
                "operationId": "resourceToMarkdown",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_resource.ToMarkdownResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/saved-queries": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "saved-queries"
                ],
                "summary": "List user's saved queries",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.SavedQueryListResponse"
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "saved-queries"
                ],
                "summary": "Create a new saved query",
                "parameters": [
                    {
                        "description": "Saved query creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.CreateSavedQueryRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.SavedQueryResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/saved-queries/reorder": {
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "saved-queries"
                ],
                "summary": "Reorder saved queries",
                "parameters": [
                    {
                        "description": "Reorder request with ordered IDs",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.ReorderRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Not the owner",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/saved-queries/{id}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "saved-queries"
                ],
                "summary": "Get saved query by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Saved query ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.SavedQueryResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "saved-queries"
                ],
                "summary": "Update saved query",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Saved query ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Saved query update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.UpdateSavedQueryRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_savedquery.SavedQueryResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Not the owner",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "saved-queries"
                ],
                "summary": "Delete saved query",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Saved query ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "403": {
                        "description": "Not the owner",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/scheduled-jobs": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all scheduled jobs for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "List all scheduled jobs",
                "operationId": "listScheduledJobs",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobsListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new scheduled job for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Create a new scheduled job",
                "operationId": "createScheduledJob",
                "parameters": [
                    {
                        "description": "Scheduled job creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.CreateScheduledJobDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/scheduled-jobs/runs/{runId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve details of a specific job run",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Get a specific job run",
                "operationId": "getScheduledJobRun",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Run ID",
                        "name": "runId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobRunResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/scheduled-jobs/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a scheduled job by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Get a scheduled job",
                "operationId": "getScheduledJob",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing scheduled job",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Update a scheduled job",
                "operationId": "updateScheduledJob",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Scheduled job update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.UpdateScheduledJobDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a scheduled job and all its run history",
                "tags": [
                    "Scheduling"
                ],
                "summary": "Delete a scheduled job",
                "operationId": "deleteScheduledJob",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/scheduled-jobs/{id}/disable": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Disable an enabled scheduled job",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Disable a scheduled job",
                "operationId": "disableScheduledJob",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/scheduled-jobs/{id}/enable": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Enable a disabled scheduled job",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Enable a scheduled job",
                "operationId": "enableScheduledJob",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/scheduled-jobs/{id}/run-now": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Manually trigger a scheduled job to run immediately",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Trigger immediate job execution",
                "operationId": "triggerScheduledJobRunNow",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobRunResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "409": {
                        "description": "Conflict - job is already running",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/scheduled-jobs/{id}/runs": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve the run history for a scheduled job",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Scheduling"
                ],
                "summary": "Get job run history",
                "operationId": "getScheduledJobRunHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Scheduled job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Maximum number of runs to return (default: 20)",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Number of runs to skip (default: 0)",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobRunsListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/share-link/{token}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Deactivate a share link",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Invitations"
                ],
                "summary": "Revoke a share link",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invitation token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "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"
                            }
                        }
                    }
                }
            }
        },
        "/share/code/{code}": {
            "get": {
                "description": "Resolve a short access code to the corresponding share token for redirection",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Sharing"
                ],
                "summary": "Resolve share code to token (public, no auth)",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Share access code",
                        "name": "code",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_share.ResolveCodeResponseDTO"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/share/invite/{token}": {
            "get": {
                "description": "View details of a share invitation (public endpoint)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Invitations"
                ],
                "summary": "Get invitation details",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invitation token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_invitation.InvitationDetailsResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/share/invite/{token}/accept": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Accept a share invitation (requires authentication)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Invitations"
                ],
                "summary": "Accept an invitation",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invitation token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_invitation.AcceptInvitationResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/share/todolist/{token}": {
            "get": {
                "description": "View a publicly shared todolist using its token",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Sharing"
                ],
                "summary": "Get shared todolist (public, no auth)",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Share token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_share.SharedTodolistResponseDTO"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/share/todolist/{token}/resource/{resourceId}": {
            "get": {
                "description": "Get presigned URL for a resource/attachment from a publicly shared todolist using the share token",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Sharing"
                ],
                "summary": "Get resource from shared todolist (public, no auth)",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Share token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Presigned download URL",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_share.SharedResourceResponseDTO"
                        }
                    },
                    "403": {
                        "description": "Resource not available in this shared todolist",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Share link not found or expired",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/share/todolist/{token}/upload": {
            "post": {
                "description": "Reserve an upload slot on a share link that accepts drops, returning a presigned upload URL",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Sharing"
                ],
                "summary": "Reserve an anonymous upload on a shared todolist (public, no auth)",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Share token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Drop metadata",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_share.PrepareDropRequestDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_share.PrepareDropResponseDTO"
                        }
                    },
                    "403": {
                        "description": "This link does not accept uploads",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Share link not found or expired",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "413": {
                        "description": "Per-file or per-link limit exceeded",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "429": {
                        "description": "Too many uploads from this client",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/share/todolist/{token}/upload/{resourceId}/confirm": {
            "post": {
                "description": "Finalise a drop after the bytes have been uploaded; verifies the stored size",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Sharing"
                ],
                "summary": "Confirm an anonymous upload on a shared todolist (public, no auth)",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Share token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Resource ID returned by the prepare step",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_share.ConfirmDropResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Uploaded bytes do not match the reservation",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Not an upload belonging to this link",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Share link not found or expired",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/skills": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "List skills",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.SkillListResponse"
                        }
                    }
                }
            },
            "post": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "Create a new skill",
                "parameters": [
                    {
                        "description": "Skill creation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.CreateSkillRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.SkillResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "409": {
                        "description": "Name already exists",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/skills/name/{name}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "Get skill by name",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Skill name (slug)",
                        "name": "name",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.SkillResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/skills/{id}": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "Get skill by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Skill ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.SkillResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "Update skill",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Skill ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Skill update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.UpdateSkillRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.SkillResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Not editable",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "Delete skill",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Skill ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "403": {
                        "description": "Not editable",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/skills/{id}/duplicate": {
            "post": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "skills"
                ],
                "summary": "Duplicate a skill",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Skill ID to duplicate",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_skill.SkillResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/tags": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns all tags for the authenticated user, sorted by usage_count DESC",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Tags"
                ],
                "summary": "List all tags",
                "operationId": "getTags",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_tag.TagListResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/tags/{name}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Deletes a tag by name if its usage_count is 0",
                "tags": [
                    "Tags"
                ],
                "summary": "Delete a tag",
                "operationId": "deleteTag",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Tag name",
                        "name": "name",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Tag deleted"
                    },
                    "404": {
                        "description": "Tag not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "409": {
                        "description": "Tag is in use",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/task-status-events": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get recent task status change events for the current user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "TaskStatusEvents"
                ],
                "summary": "Get task status change events",
                "operationId": "getTaskStatusEvents",
                "parameters": [
                    {
                        "type": "integer",
                        "default": 200,
                        "description": "Maximum number of events to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_task_status_event.TaskStatusEventResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/tasks/from-image": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Upload an image file that will create a task immediately with a placeholder title, then process with AI vision to update the task",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Task from Image"
                ],
                "summary": "Create a task from a pasted image",
                "operationId": "createTaskFromImage",
                "parameters": [
                    {
                        "type": "file",
                        "description": "Image file to upload",
                        "name": "image",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_task_from_image.CreateTaskFromImageResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/tasks/from-image/process/{queueTaskId}": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Process a specific queue task by its ID using AI vision to update the task",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Task from Image"
                ],
                "summary": "Manually trigger AI vision processing for a task",
                "operationId": "processTaskFromImageVision",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Queue Task ID",
                        "name": "queueTaskId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_task_from_image.ProcessTaskResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/tasks/from-resource/{resourceId}": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Use an already uploaded image resource to create a task with AI vision processing",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Task from Image"
                ],
                "summary": "Create a task from an existing resource",
                "operationId": "createTaskFromResource",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_task_from_image.CreateTaskFromImageResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/test/ocr": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Test endpoint to validate OCR service functionality with external OCR server",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "OCR"
                ],
                "summary": "Test OCR service integration (test mode only)",
                "operationId": "testOCRService",
                "parameters": [
                    {
                        "description": "OCR request with image path",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ocr.OCRRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OCR processing successful",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ocr.OCRResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request payload",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ocr.OCRResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "OCR service error",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ocr.OCRResponse"
                        }
                    },
                    "503": {
                        "description": "Test endpoint not available in production",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_ocr.OCRResponse"
                        }
                    }
                }
            }
        },
        "/test/permission/admin": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Endpoint to verify admin-only routes are protected",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Permission Test"
                ],
                "summary": "Test admin access",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_permission_test.PermissionCheckResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Admin access required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/test/permission/auth": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Endpoint to verify authentication is required",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Permission Test"
                ],
                "summary": "Test authenticated access",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_permission_test.PermissionCheckResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/test/permission/expense-read": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Endpoint to verify expense:read permission is enforced",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Permission Test"
                ],
                "summary": "Test expense:read permission",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_permission_test.PermissionCheckResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Permission denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/test/permission/expense-write": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Endpoint to verify expense:write permission is enforced",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Permission Test"
                ],
                "summary": "Test expense:write permission",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_permission_test.PermissionCheckResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Permission denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/test/permission/public": {
            "get": {
                "description": "Endpoint to verify public routes work without authentication",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Permission Test"
                ],
                "summary": "Test public access",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_permission_test.PermissionCheckResponse"
                        }
                    }
                }
            }
        },
        "/test/permission/test-feature": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Endpoint to verify feature:test-feature permission is enforced",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Permission Test"
                ],
                "summary": "Test feature:test-feature permission",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_permission_test.PermissionCheckResponse"
                        }
                    },
                    "401": {
                        "description": "Authentication required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Permission denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/todolist": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "DEPRECATED: use GET /todolist/paginated instead. Retrieves all todolist items belonging to the authenticated user; suffers from an N+1 load that scales with task count.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get all user todolist items (deprecated)",
                "operationId": "getAllTodolistItems",
                "deprecated": true,
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new todolist item for the authenticated user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Create a new todolist item",
                "operationId": "createTodolistItem",
                "parameters": [
                    {
                        "description": "Todolist item creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateTodolistItemDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist-from-audio": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Upload an audio file, transcribe it with AI, and create a structured todolist item. The audio is saved as an attachment.",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Create todolist item from audio recording",
                "operationId": "createTodolistFromAudio",
                "parameters": [
                    {
                        "type": "file",
                        "description": "Audio file",
                        "name": "audio",
                        "in": "formData",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Language hint (e.g., zh, en)",
                        "name": "language",
                        "in": "formData"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_from_audio.CreateFromAudioResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist-from-text": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Parse free text using AI and create a structured todolist item. The AI will generate a title and preserve the description in the same language as the input text.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Create todolist item from free text",
                "operationId": "createTodolistFromText",
                "parameters": [
                    {
                        "description": "Free text to parse",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_from_text.CreateFromTextDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_from_text.CreateFromTextResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist-from-vision/process-task/{taskId}": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Process a specific image task by its ID using AI vision",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist from Vision"
                ],
                "summary": "Manually trigger processing of a specific task",
                "operationId": "processTodolistVisionTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "taskId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_from_vision.ProcessTaskResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/todolist-from-vision/upload": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Upload an image file that will be processed using AI vision to extract todolist information",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist from Vision"
                ],
                "summary": "Upload an image for todolist processing using AI vision",
                "operationId": "uploadImageForTodolistVisionProcessing",
                "parameters": [
                    {
                        "type": "file",
                        "description": "Image file to upload",
                        "name": "image",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_from_vision.UploadImageResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/todolist-vision/prepare-upload": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Creates a resource record and returns a presigned URL for direct upload to storage",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Vision Upload"
                ],
                "summary": "Prepare a presigned URL for vision image upload",
                "operationId": "prepareVisionUpload",
                "parameters": [
                    {
                        "description": "Upload preparation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_vision_upload.PrepareUploadRequestDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_vision_upload.PrepareUploadResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Quota exceeded or invalid file type",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/todolist-vision/status/{resourceId}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Check the status of AI vision processing for an uploaded image",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Vision Upload"
                ],
                "summary": "Get vision processing status",
                "operationId": "getVisionStatus",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Resource ID",
                        "name": "resourceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_vision_upload.GetStatusResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/todolist-vision/upload-complete": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Called after client completes direct upload to storage, triggers AI vision processing",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Vision Upload"
                ],
                "summary": "Confirm upload completion and trigger AI processing",
                "operationId": "confirmVisionUpload",
                "parameters": [
                    {
                        "description": "Upload confirmation request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_vision_upload.UploadCompleteRequestDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist_vision_upload.UploadCompleteResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/todolist/activity": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve task activity counts aggregated by day for a date range.\nUsed for displaying activity heatmaps like GitHub contribution graphs.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get daily task activity",
                "operationId": "getDailyActivity",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Start date (YYYY-MM-DD format)",
                        "name": "start",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "End date (YYYY-MM-DD format)",
                        "name": "end",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.DailyActivityResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request - invalid date format",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/agile-snapshot": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Executes the same burndown snapshot + velocity settlement the daily cron runs. Idempotent per day.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Run the agile snapshot sweep immediately (admin)",
                "operationId": "runAgileSnapshot",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_core_todolist.AgileSnapshotStats"
                        }
                    },
                    "403": {
                        "description": "Admin required",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/batch": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve multiple todolist items by providing a list of IDs. Only returns items owned by or shared with the authenticated user.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get multiple todolist items by their IDs",
                "operationId": "getTodolistItemsByIDs",
                "parameters": [
                    {
                        "description": "List of todolist item IDs",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchGetTodolistItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemsResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/batch-delete": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete multiple todolist items by their IDs",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Batch delete multiple todolist items",
                "operationId": "batchDeleteTodolistItems",
                "parameters": [
                    {
                        "description": "Batch delete data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchDeleteTodolistItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateResultDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/batch-transfer": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Transfer ownership of multiple todolist items to a new owner",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Batch transfer ownership of multiple todolist items",
                "operationId": "batchTransferTodolistOwnership",
                "parameters": [
                    {
                        "description": "Batch transfer ownership data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchTransferOwnershipDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateResultDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/batch-update": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update multiple todolist items with the same changes",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Batch update multiple todolist items",
                "operationId": "batchUpdateTodolistItems",
                "parameters": [
                    {
                        "description": "Batch update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateTodolistItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateResultDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/batch-update-each": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update multiple todolist items where each item has its own individual updates. Used after wikilink resolution.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Batch update with per-item changes (for wikilink resolution)",
                "operationId": "batchUpdateEachTodolistItems",
                "parameters": [
                    {
                        "description": "Per-item updates",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateEachDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateEachResultDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/batch-upsert": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create or update multiple todolist items in a single call. Uses metadata.obsidianPath for idempotent matching.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Batch upsert todolist items (for Obsidian import)",
                "operationId": "batchUpsertTodolistItems",
                "parameters": [
                    {
                        "description": "Items to upsert",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpsertTodolistItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpsertResultDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/comments/recent": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get recent comments across all accessible tasks",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Page number (default: 1)",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page size (default: 50, max: 100)",
                        "name": "pageSize",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.RecentCommentsResponseDTO"
                        }
                    }
                }
            }
        },
        "/todolist/comments/{commentId}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get a single comment with its replies and task context",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Comment ID",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.RecentCommentDTO"
                        }
                    },
                    "404": {
                        "description": "Comment not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/custom-fields": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all custom field definitions for the authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Get all custom field definitions",
                "operationId": "getCustomFieldDefinitions",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.CustomFieldDefinitionResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new custom field definition for todolist items. The 'name' field is optional - if not provided, a unique field key will be auto-generated (format: field_{uuid}). This supports custom field names in any language including Chinese, Japanese, Arabic, etc.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Create a new custom field definition",
                "operationId": "createCustomFieldDefinition",
                "parameters": [
                    {
                        "description": "Custom field definition data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateCustomFieldDefinitionDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CustomFieldDefinitionResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "409": {
                        "description": "Duplicate field name",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/custom-fields/user-candidates": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all users available for selection in user-type custom fields. Returns users from all groups the current user belongs to.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Get user candidates for custom fields",
                "operationId": "getUserCandidates",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.UserCandidateResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/custom-fields/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a specific custom field definition by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Get a custom field definition by ID",
                "operationId": "getCustomFieldDefinitionByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Custom Field Definition ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CustomFieldDefinitionResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Custom field definition not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing custom field definition by its ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Update a custom field definition",
                "operationId": "updateCustomFieldDefinition",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Custom Field Definition ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Custom field definition update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.UpdateCustomFieldDefinitionDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CustomFieldDefinitionResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Custom field definition not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "409": {
                        "description": "Duplicate field name",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a custom field definition by its ID",
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Delete a custom field definition",
                "operationId": "deleteCustomFieldDefinition",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Custom Field Definition ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Custom field definition not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/daily-note": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns today's daily note task, creating it if it doesn't exist. Carries over unchecked checkboxes from previous daily note.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get or create daily note",
                "operationId": "dailyNote",
                "parameters": [
                    {
                        "description": "Optional date (defaults to today)",
                        "name": "request",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_daily_note.GetOrCreateRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/deleted": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all soft-deleted todolist items for the authenticated user (trash bin)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get soft-deleted todolist items",
                "operationId": "getDeletedTodolistItems",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/deleted/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a single soft-deleted todolist item by ID with all relations (notes, share links)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get a single soft-deleted todolist item",
                "operationId": "getDeletedTodolistItemByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Permanently delete a soft-deleted todolist item and all its related data (notes, comments, attachments, history)",
                "tags": [
                    "Todolist"
                ],
                "summary": "Permanently delete a soft-deleted todolist item",
                "operationId": "hardDeleteTodolistItem",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "400": {
                        "description": "Item is not soft-deleted",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/explorer": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns all tasks with only id, title, path, status, tags, and deadline.\nDesigned for the explorer sidebar that needs the full task set to build the folder tree.\nNo pagination — returns everything in a single response.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get all tasks with minimal fields for explorer tree",
                "operationId": "getExplorerItems",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.ExplorerResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/graph": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve only todolist items that have relationships (derivedFromId or linkedToIds) for graph visualization",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get graph data",
                "operationId": "getTodolistGraphData",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistGraphResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/hierarchy": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns all tasks with id, title, status, tags, description, and derivedFromId so the client\ncan build the whole parent-child forest from one response. Designed for `ud hierarchy`.\nNo notes or share links are loaded, avoiding the per-item N+1 of GET /todolist. No pagination.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get all tasks with minimal fields for the parent-child hierarchy",
                "operationId": "getTodolistHierarchyItems",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.HierarchyItemsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/nl-query": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "AI converts natural language queries to structured SQL-like queries.\nThe generated query is returned for transparency.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Query todolist items with natural language",
                "operationId": "nlQueryTodolistItems",
                "parameters": [
                    {
                        "description": "Natural language query",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NLQueryTodolistItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NLQueryTodolistItemsResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/paginated": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve todolist items with cursor-based pagination and predefined filtering.\nBest for infinite scroll UIs with simple filter requirements.\nFor complex queries, use POST /todolist/query instead.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get paginated user todolist items",
                "operationId": "getPaginatedTodolistItems",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Pagination cursor (empty for first page)",
                        "name": "cursor",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Items per page (default: 50, max: 100)",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Sort field: created_at, updated_at, title, deadline",
                        "name": "sortBy",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Sort order: asc or desc (default: desc)",
                        "name": "sortOrder",
                        "in": "query"
                    },
                    {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "collectionFormat": "csv",
                        "description": "Filter by status (can specify multiple)",
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "collectionFormat": "csv",
                        "description": "Filter by tags (can specify multiple)",
                        "name": "tags",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Search query (substring match on title, description, and note bodies)",
                        "name": "search",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.PaginatedTodolistItemsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/query": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve todolist items using SQL-like query language with page-based pagination.\nSupports complex filtering with operators: =, !=, \u003e, \u003c, \u003e=, \u003c=, LIKE, ILIKE, IN, CONTAINS_ALL.\nUse this endpoint for advanced search functionality with arbitrary filter combinations.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Query todolist items with SQL-like syntax",
                "operationId": "queryTodolistItems",
                "parameters": [
                    {
                        "description": "Query parameters",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.QueryTodolistItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.QueryTodolistItemsResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request - invalid query syntax",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/share/{token}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Deactivate a share link",
                "tags": [
                    "Todolist"
                ],
                "summary": "Revoke share link",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Share token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/synced-paths": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns all obsidianPath values that have been synced for the user. Used for \"Sync New Only\" mode.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get list of synced Obsidian paths",
                "operationId": "getSyncedPaths",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.SyncedPathsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/tree": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns all tasks with id, title, path, status, tags, and description (for an inline preview).\nDesigned for `ud tree`, which needs the full task set to build the path tree. No notes or\nshare links are loaded, so this avoids the per-item N+1 of GET /todolist. No pagination.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get all tasks with minimal fields for the path tree",
                "operationId": "getTodolistTreeItems",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TreeItemsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve a specific todolist item by its ID with related data",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get a specific todolist item by ID",
                "operationId": "getTodolistItemByID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update an existing todolist item by its ID. Setting `assignee` requires a valid user id that a live user holds — a malformed or unknown id is a 400 rather than being stored verbatim. Membership is NOT checked here; use PUT /assignments/{task} for the assignment relation, which additionally requires the assignee to be someone the task has been shared with.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Update an existing todolist item",
                "operationId": "updateTodolistItem",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Todolist item update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.UpdateTodolistItemDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a todolist item by its ID along with all related data",
                "tags": [
                    "Todolist"
                ],
                "summary": "Delete a todolist item",
                "operationId": "deleteTodolistItem",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/applicable-fields": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve custom field definitions that apply to a specific task based on its tags",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist Custom Fields"
                ],
                "summary": "Get applicable custom fields for a task",
                "operationId": "getApplicableCustomFields",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.CustomFieldDefinitionResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/board": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns the board that contains this task (via group membership), or 204 if none",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get task's board",
                "operationId": "getTaskBoard",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TaskBoardResponseDTO"
                        }
                    },
                    "204": {
                        "description": "No board associated"
                    },
                    "404": {
                        "description": "Task not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/boards": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns all boards that contain this task. Pass ?all=true to return all user-accessible boards instead.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get task's boards",
                "operationId": "getTaskBoards",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "boolean",
                        "description": "Return all user-accessible boards instead of task-specific ones",
                        "name": "all",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.TaskBoardResponseDTO"
                            }
                        }
                    },
                    "404": {
                        "description": "Task not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/check-in": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Increment the check-in count for a todolist item",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Check in to a todolist item",
                "operationId": "checkInTodolistItem",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CheckInResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/close-sprint": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Rollover target is \"backlog\" or an open sprint id. Milestone-ordered: the sprint only flips to done after every rollover succeeded (retry-safe).",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Close a sprint: roll over unfinished members, settle velocity, write retro note",
                "operationId": "closeSprint",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Sprint task ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Rollover target",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CloseSprintDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_core_todolist.CloseSprintResult"
                        }
                    },
                    "400": {
                        "description": "Not a sprint / bad target",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/comments": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all comments organized as threaded tree",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get all comments for a todolist item",
                "operationId": "getTodolistComments",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Add a top-level comment with optional anchor to description or note",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Add a comment to a todolist item",
                "operationId": "addTodolistComment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Comment creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateCommentDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/comments/{commentId}": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a comment's content (author only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Update a comment",
                "operationId": "updateTodolistComment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Comment ID",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Comment update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.UpdateCommentDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a comment (author or task owner)",
                "tags": [
                    "Todolist"
                ],
                "summary": "Delete a comment",
                "operationId": "deleteTodolistComment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Comment ID",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/comments/{commentId}/replies": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Add a reply to an existing top-level comment",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Add a reply to a comment",
                "operationId": "addTodolistCommentReply",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Comment ID",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Reply creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateReplyDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/comments/{commentId}/resolve": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Toggle the resolved state of a top-level comment (author or task owner)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Resolve or unresolve a comment",
                "operationId": "resolveTodolistComment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Comment ID",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Resolve state",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.ResolveCommentDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/comments/{commentId}/subscribers": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Thread authors plus actors with sessions bound to the thread, each with subscription state (subscribed / muted / none).",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "List a comment thread's participants with their routing state",
                "operationId": "getCommentSubscribers",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Comment ID (any comment in the thread)",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.ThreadSubscriberDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/comments/{commentId}/subscription": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Exits (or re-enters) a participant from the thread's ambient broadcast. Visibility is unaffected; explicit mentions still deliver. commentId may be any comment in the thread.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Subscribe or unsubscribe a participant from a comment thread's routing",
                "operationId": "setCommentSubscription",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Comment ID (any comment in the thread)",
                        "name": "commentId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Subscription change",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentSubscriptionDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Subscription updated",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentSubscriptionResultDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "403": {
                        "description": "Not allowed to change another member's subscription",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/description-history": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all historical versions of the description for a todolist item",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get description history for a todolist item",
                "operationId": "getDescriptionHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.DescriptionHistoryListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/description-history/{historyId}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a specific description history record",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Delete a description history record",
                "operationId": "deleteDescriptionHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "History ID",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "History record not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/hierarchy": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve the complete hierarchy tree for a todolist item (ancestors, descendants, and linked items)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get todolist item hierarchy",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "When 'true', treat the selected item as tree root (skip ancestor walk-up)",
                        "name": "asRoot",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.HierarchyResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/linked-items": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Add one or more linked items to a todolist item, creating bi-directional links",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Add linked items to a todolist item",
                "operationId": "addLinkedItems",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Linked items data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.AddLinkedItemsDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/linked-items/{linkedItemId}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Remove a specific linked item from a todolist item, removing bi-directional links",
                "tags": [
                    "Todolist"
                ],
                "summary": "Remove a linked item from a todolist item",
                "operationId": "removeLinkedItem",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Linked Item ID to remove",
                        "name": "linkedItemId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/mentionable": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "People and agents the caller may @ from this task. Agents are filtered by the same reachability rule the mention router enforces. People who cannot read the task are still listed, with addressable=false.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "List mentionable members for a task",
                "operationId": "listMentionable",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_mentionable.CandidateDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Task not found or not readable",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/metadata": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a single metadata key for a todolist item (e.g., order, priority)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Patch todolist item metadata",
                "operationId": "patchTodolistMetadata",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Key-value pair to patch",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.PatchMetadataDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/metadata/{key}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Remove a single metadata key-value pair entirely from a todolist item",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Delete a metadata key from a todolist item",
                "operationId": "deleteTodolistMetadata",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Metadata key to delete",
                        "name": "key",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/move": {
            "patch": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Move a task (and batch-update child paths) to a new path",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Move a task to a new path",
                "operationId": "moveTask",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "New path",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.MoveTaskDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/notes/{noteId}/history": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Retrieve all historical versions of a specific note",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get history for a specific note",
                "operationId": "getNoteHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NoteHistoryListResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item or note not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/notes/{noteId}/history/{historyId}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a specific note history record",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Delete a note history record",
                "operationId": "deleteNoteHistory",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "History ID",
                        "name": "historyId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "History record not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/projects": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Link projects to a task",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Project IDs to link",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.LinkProjectDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    }
                }
            }
        },
        "/todolist/{id}/projects/{projectId}": {
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Unlink a project from a task",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Task ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "projectId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    }
                }
            }
        },
        "/todolist/{id}/restore": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Restore a soft-deleted todolist item to make it visible again",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Restore a soft-deleted todolist item",
                "operationId": "restoreTodolistItem",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/share": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Generate a public share link for a todolist item",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Create share link for todolist",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Share options",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateShareLinkDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.ShareLinkResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/share-drops": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Returns owner-only parcel audit records, including private drop-off messages",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "List completed anonymous drops for a todolist owner",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.ShareDropsResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/share-group": {
            "put": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update group sharing settings for a todolist item (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Share task to group",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Group sharing settings",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.ShareToGroupDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/shares": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all active share links for a todolist",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "List share links",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.ShareLinksResponseDTO"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{id}/transfer-ownership": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Transfer ownership of a todolist item to another user. Only the current owner can transfer.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Transfer todolist item ownership",
                "operationId": "transferTodolistOwnership",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Transfer ownership data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TransferOwnershipDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{itemId}/notes": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get all notes for a todolist item",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Get all notes for a todolist item",
                "operationId": "getTodolistNotes",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "itemId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_todolist.NoteResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Add a note to a todolist item",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Add a note to a todolist item",
                "operationId": "addTodolistNote",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "itemId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Note creation data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateNoteDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NoteResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{itemId}/notes/{noteId}": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Update a specific note in a todolist item",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Update a specific note",
                "operationId": "updateTodolistNote",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "itemId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Note update data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.UpdateNoteDTO"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.NoteResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item or note not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Delete a specific note from a todolist item",
                "tags": [
                    "Todolist"
                ],
                "summary": "Delete a specific note",
                "operationId": "deleteTodolistNote",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Todolist Item ID",
                        "name": "itemId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Note ID",
                        "name": "noteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Todolist item or note not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/todolist/{originalItemId}/create-from-existing": {
            "post": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Create a new todolist item from an existing one, linking them together",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Todolist"
                ],
                "summary": "Create a new todolist item from an existing one",
                "operationId": "createTodolistFromExisting",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Original Todolist Item ID",
                        "name": "originalItemId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Create from existing data",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CreateFromExistingDTO"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    },
                    "400": {
                        "description": "Bad request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "404": {
                        "description": "Original todolist item not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        },
        "/workspace-events": {
            "get": {
                "security": [
                    {
                        "BearerAuth": []
                    }
                ],
                "description": "Get recent workspace status change events for the current user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Workspace"
                ],
                "summary": "Get workspace events",
                "operationId": "getWorkspaceEvents",
                "parameters": [
                    {
                        "type": "integer",
                        "default": 50,
                        "description": "Maximum number of events to return",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/internal_adapter_web_workspace_event.WorkspaceEventResponseDTO"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "gin.H": {
            "type": "object",
            "additionalProperties": {}
        },
        "github_com_undercontrol_backend_internal_adapter_web_ginutil.ErrorResponse": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string"
                },
                "details": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "message": {
                    "type": "string"
                },
                "traceId": {
                    "type": "string"
                },
                "validationErrors": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_ginutil.FieldErrorResponse"
                    }
                }
            }
        },
        "github_com_undercontrol_backend_internal_adapter_web_ginutil.FieldErrorResponse": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string"
                },
                "field": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_adapter_web_todolist.LinkedItemInfoDTO": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "status",
                "title",
                "updated_at"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "kickoff": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_adapter_web_todolist.NoteResponseDTO": {
            "type": "object",
            "required": [
                "content",
                "created_at",
                "created_by",
                "id",
                "updated_at",
                "updated_by"
            ],
            "properties": {
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_adapter_web_todolist.ShareLinkResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "isActive",
                "token"
            ],
            "properties": {
                "allowAttachments": {
                    "type": "boolean"
                },
                "allowUpload": {
                    "type": "boolean"
                },
                "code": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "expiresAt": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "isActive": {
                    "type": "boolean"
                },
                "token": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_adapter_web_todolist.TodolistItemResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "created_by",
                "id",
                "status",
                "title",
                "updated_at",
                "updated_by"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "checkInCount": {
                    "type": "integer"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "deleted_at": {
                    "description": "Soft delete timestamp",
                    "type": "string"
                },
                "deleted_by": {
                    "description": "User who deleted the item",
                    "type": "string"
                },
                "derivedFrom": {
                    "description": "Enriched object (only populated in detail views)",
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.LinkedItemInfoDTO"
                        }
                    ]
                },
                "derivedFromId": {
                    "description": "Raw ID for building relationships",
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "groupId": {
                    "description": "Group this task is shared with",
                    "type": "string"
                },
                "groupPermission": {
                    "description": "\"r\" for read, \"rw\" for read-write",
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "kickoff": {
                    "type": "string"
                },
                "lastCheckedInAt": {
                    "type": "string"
                },
                "linkedTo": {
                    "description": "Enriched objects (only populated in detail views)",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.LinkedItemInfoDTO"
                    }
                },
                "linkedToIds": {
                    "description": "Raw IDs for building relationships",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "metadata": {
                    "description": "Extensible metadata (order, priority, etc.)",
                    "type": "object",
                    "additionalProperties": {}
                },
                "notes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.NoteResponseDTO"
                    }
                },
                "path": {
                    "type": "string"
                },
                "shareLinks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.ShareLinkResponseDTO"
                    }
                },
                "status": {
                    "type": "string"
                },
                "subtasks": {
                    "description": "Enriched subtask objects (tasks derived from this one)",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.LinkedItemInfoDTO"
                    }
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_core_todolist.AgileSnapshotStats": {
            "type": "object",
            "properties": {
                "activeSprints": {
                    "type": "integer"
                },
                "date": {
                    "type": "string"
                },
                "velocitySettled": {
                    "type": "integer"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_core_todolist.CloseSprintResult": {
            "type": "object",
            "properties": {
                "completed": {
                    "type": "integer"
                },
                "rolledOver": {
                    "type": "integer"
                },
                "sprintId": {
                    "type": "string"
                },
                "target": {
                    "description": "\"backlog\" or the target sprint id",
                    "type": "string"
                },
                "velocity": {
                    "type": "number"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_support_resource.ContentHistoryVersion": {
            "type": "object",
            "properties": {
                "downloadUrl": {
                    "type": "string"
                },
                "fileKey": {
                    "type": "string"
                },
                "fileSize": {
                    "type": "integer"
                },
                "id": {
                    "type": "string"
                },
                "mimeType": {
                    "type": "string"
                },
                "replacedAt": {
                    "type": "string"
                },
                "replacedBy": {
                    "type": "string"
                },
                "version": {
                    "description": "1 = oldest retired version",
                    "type": "integer"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.AdjustmentDTO": {
            "type": "object",
            "required": [
                "adjustmentDate",
                "amount",
                "id"
            ],
            "properties": {
                "adjustmentDate": {
                    "type": "string"
                },
                "amount": {
                    "type": "number"
                },
                "id": {
                    "type": "string"
                },
                "reason": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.BudgetWithExpensesResponse": {
            "type": "object",
            "required": [
                "currency",
                "expenses",
                "id",
                "initialAmount",
                "name",
                "oneTimeAdjustments",
                "ownerId",
                "plans",
                "remaining",
                "spent",
                "startsAt",
                "thisMonthSpent",
                "total"
            ],
            "properties": {
                "currency": {
                    "description": "Budget currency code (e.g., \"CNY\", \"USD\")",
                    "type": "string"
                },
                "expenses": {
                    "description": "Related data from different domains",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.ExpenseDTO"
                    }
                },
                "groupId": {
                    "type": "string"
                },
                "groupPermission": {
                    "type": "string"
                },
                "hidden": {
                    "type": "boolean"
                },
                "id": {
                    "description": "Core budget fields",
                    "type": "string"
                },
                "initialAmount": {
                    "type": "number"
                },
                "isShared": {
                    "description": "True if budget is owned by someone else",
                    "type": "boolean"
                },
                "monthlyAverageBudget": {
                    "description": "Active plan monthly rate + averaged adjustments",
                    "type": "number"
                },
                "monthlyBudget": {
                    "description": "Monthly view fields (populated when month parameter is provided)",
                    "type": "number"
                },
                "monthlySpent": {
                    "description": "Expenses in selected month",
                    "type": "number"
                },
                "name": {
                    "type": "string"
                },
                "oneTimeAdjustments": {
                    "description": "One-time adjustments",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.AdjustmentDTO"
                    }
                },
                "ownerId": {
                    "type": "string"
                },
                "plan": {
                    "description": "Current active plan (optional - may be nil)",
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.PlanDTO"
                        }
                    ]
                },
                "plans": {
                    "description": "All budget plans",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.PlanDTO"
                    }
                },
                "remaining": {
                    "description": "Remaining budget amount",
                    "type": "number"
                },
                "spent": {
                    "description": "Total amount spent",
                    "type": "number"
                },
                "startsAt": {
                    "type": "string"
                },
                "thisMonthSpent": {
                    "description": "Amount spent in current month",
                    "type": "number"
                },
                "total": {
                    "description": "Total budget amount including adjustments",
                    "type": "number"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.ExpenseDTO": {
            "type": "object",
            "required": [
                "amount",
                "createdAt",
                "id"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "createdAt": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "hidden": {
                    "type": "boolean"
                },
                "id": {
                    "type": "string"
                },
                "occurredAt": {
                    "type": "string"
                },
                "payByAccount": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_budget_with_expenses.PlanDTO": {
            "type": "object",
            "required": [
                "amount",
                "effectiveFrom",
                "frequency"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "effectiveFrom": {
                    "type": "string"
                },
                "effectiveTo": {
                    "type": "string"
                },
                "frequency": {
                    "type": "string"
                },
                "reason": {
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_cash_flow.CashFlowResponse": {
            "type": "object",
            "properties": {
                "buckets": {
                    "description": "current month per-currency aggregation",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_cash_flow.CurrencyBucket"
                    }
                },
                "currencies": {
                    "description": "all currencies seen",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "month": {
                    "description": "YYYY-MM of the requested month",
                    "type": "string"
                },
                "monthly_trend": {
                    "description": "historical monthly data",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_cash_flow.MonthlyTrendEntry"
                    }
                },
                "trend_months": {
                    "description": "how many months of trend data",
                    "type": "integer"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_cash_flow.CurrencyBucket": {
            "type": "object",
            "properties": {
                "currency": {
                    "type": "string"
                },
                "expense_count": {
                    "type": "integer"
                },
                "income_count": {
                    "type": "integer"
                },
                "net": {
                    "type": "number"
                },
                "total_expenses": {
                    "type": "number"
                },
                "total_income": {
                    "type": "number"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_cash_flow.MonthlyTrendEntry": {
            "type": "object",
            "properties": {
                "buckets": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_usecase_cash_flow.TrendBucket"
                    }
                },
                "month": {
                    "description": "YYYY-MM",
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_cash_flow.TrendBucket": {
            "type": "object",
            "properties": {
                "currency": {
                    "type": "string"
                },
                "expenses": {
                    "type": "number"
                },
                "income": {
                    "type": "number"
                },
                "net": {
                    "type": "number"
                }
            }
        },
        "github_com_undercontrol_backend_internal_domain_usecase_daily_note.GetOrCreateRequest": {
            "type": "object",
            "properties": {
                "date": {
                    "description": "\"2026-04-17\", defaults to today if empty",
                    "type": "string"
                }
            }
        },
        "github_com_undercontrol_backend_internal_license.LicensePayload": {
            "type": "object",
            "properties": {
                "created_at": {
                    "description": "Unix timestamp",
                    "type": "integer"
                },
                "max_users": {
                    "description": "Maximum users allowed, 0 = unlimited",
                    "type": "integer"
                },
                "nonce": {
                    "description": "UUID for uniqueness",
                    "type": "string"
                },
                "tier": {
                    "description": "\"pro\" or \"max\", defaults to \"pro\"",
                    "type": "string"
                },
                "user_name": {
                    "type": "string"
                },
                "user_secret_hash": {
                    "description": "SHA-256 hash of user's secret",
                    "type": "string"
                },
                "valid_until": {
                    "description": "Unix timestamp",
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_account.AccountDetailsResponseDTO": {
            "type": "object",
            "required": [
                "account",
                "histories"
            ],
            "properties": {
                "account": {
                    "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                },
                "histories": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_account.AccountHistoryResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_account.AccountHistoryResponseDTO": {
            "type": "object",
            "required": [
                "account_id",
                "balance",
                "created_at",
                "id",
                "name",
                "off_budget",
                "owner_id",
                "tags",
                "updated_at"
            ],
            "properties": {
                "account_id": {
                    "type": "string"
                },
                "balance": {
                    "$ref": "#/definitions/internal_adapter_web_account.MoneyDTO"
                },
                "comment": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "notes": {
                    "type": "string"
                },
                "off_budget": {
                    "type": "boolean"
                },
                "owner_id": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_account.AccountResponseDTO": {
            "type": "object",
            "required": [
                "balance",
                "created_at",
                "id",
                "name",
                "off_budget",
                "owner_id",
                "tags",
                "updated_at"
            ],
            "properties": {
                "balance": {
                    "$ref": "#/definitions/internal_adapter_web_account.MoneyDTO"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "notes": {
                    "type": "string"
                },
                "off_budget": {
                    "type": "boolean"
                },
                "owner_id": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_account.AmountDTO": {
            "type": "object",
            "required": [
                "amount",
                "currency"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_account.ConvertedTotalsDTO": {
            "type": "object",
            "required": [
                "budgetTotal",
                "currency",
                "offBudgetTotal",
                "total"
            ],
            "properties": {
                "belowPrecision": {
                    "description": "BelowPrecision means the total is non-zero but rounds to 0 at 2dp, so the\nUI should render \"\u003c 0.01\" rather than a bare \"0\".",
                    "type": "boolean"
                },
                "budgetTotal": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                },
                "missingRates": {
                    "description": "MissingRates lists currencies left out of the totals for lack of a rate.\nNon-empty means the roll-up is incomplete and the UI must flag it.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "offBudgetTotal": {
                    "type": "number"
                },
                "total": {
                    "type": "number"
                }
            }
        },
        "internal_adapter_web_account.CreateAccountDTO": {
            "type": "object",
            "required": [
                "balance",
                "name"
            ],
            "properties": {
                "balance": {
                    "description": "Uses the pointer-amount form so an opening balance of 0 is distinguishable\nfrom \"not provided\" — `binding:\"required\"` on a bare float64 treats 0 as\nabsent, which rejected the single most common way to open an account.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_account.AmountDTO"
                        }
                    ]
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                },
                "notes": {
                    "type": "string",
                    "maxLength": 500
                },
                "off_budget": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_account.CurrencyTotalDTO": {
            "type": "object",
            "required": [
                "currency",
                "total"
            ],
            "properties": {
                "currency": {
                    "type": "string"
                },
                "total": {
                    "type": "number"
                }
            }
        },
        "internal_adapter_web_account.HomepageResponseDTO": {
            "type": "object",
            "required": [
                "accountCount",
                "budgetAccounts",
                "budgetTotals",
                "offBudgetAccounts",
                "offBudgetTotals",
                "totals"
            ],
            "properties": {
                "accountCount": {
                    "type": "integer"
                },
                "budgetAccounts": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                    }
                },
                "budgetTotals": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_account.CurrencyTotalDTO"
                    }
                },
                "conversionUnavailable": {
                    "description": "ConversionUnavailable explains why `converted` is absent when a roll-up was\nrequested: \"no_rates_configured\" or \"target_currency_unrated\". Empty when a\nroll-up was not requested, or succeeded.",
                    "type": "string"
                },
                "converted": {
                    "$ref": "#/definitions/internal_adapter_web_account.ConvertedTotalsDTO"
                },
                "offBudgetAccounts": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_account.AccountResponseDTO"
                    }
                },
                "offBudgetTotals": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_account.CurrencyTotalDTO"
                    }
                },
                "totals": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_account.CurrencyTotalDTO"
                    }
                }
            }
        },
        "internal_adapter_web_account.MoneyDTO": {
            "type": "object",
            "required": [
                "amount",
                "currency"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_account.ShareToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" for read, \"rw\" for read-write, \"\" for none",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_account.UpdateAccountDTO": {
            "type": "object",
            "properties": {
                "balance": {
                    "$ref": "#/definitions/internal_adapter_web_account.UpdateMoneyDTO"
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                },
                "notes": {
                    "type": "string",
                    "maxLength": 500
                },
                "off_budget": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_account.UpdateAccountHistoryCommentDTO": {
            "type": "object",
            "properties": {
                "comment": {
                    "type": "string",
                    "maxLength": 500
                }
            }
        },
        "internal_adapter_web_account.UpdateMoneyDTO": {
            "type": "object",
            "required": [
                "amount",
                "currency"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.APIEndpoint": {
            "type": "object",
            "properties": {
                "category": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "method": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "public": {
                    "type": "boolean"
                },
                "tier": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.APIPermissionInfo": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "key": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.APIReferenceResponse": {
            "type": "object",
            "properties": {
                "categories": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "endpoints": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.APIEndpoint"
                    }
                },
                "methods": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.APIPermissionInfo"
                    }
                },
                "tiers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.APITierInfo"
                    }
                }
            }
        },
        "internal_adapter_web_admin.APITierInfo": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "key": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.AdminGroupResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "member_count": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "owner_name": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.AssignRoleRequest": {
            "type": "object",
            "required": [
                "roleId"
            ],
            "properties": {
                "roleId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.CreateRoleRequest": {
            "type": "object",
            "required": [
                "name",
                "permissions"
            ],
            "properties": {
                "description": {
                    "type": "string",
                    "maxLength": 500
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_admin.CreateUserRequest": {
            "type": "object",
            "required": [
                "password",
                "username"
            ],
            "properties": {
                "language": {
                    "type": "string",
                    "enum": [
                        "en",
                        "zh"
                    ]
                },
                "password": {
                    "type": "string",
                    "minLength": 6
                },
                "role": {
                    "type": "string",
                    "enum": [
                        "admin",
                        "user",
                        "visitor"
                    ]
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.DownloadEventDTO": {
            "type": "object",
            "properties": {
                "cdn": {
                    "type": "string"
                },
                "createdAt": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "inviteCode": {
                    "type": "string"
                },
                "inviterUserId": {
                    "type": "string"
                },
                "inviterUsername": {
                    "type": "string"
                },
                "platform": {
                    "type": "string"
                },
                "version": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.DownloadMetricsResponse": {
            "description": "Download metrics summary",
            "type": "object",
            "properties": {
                "byCdn": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "integer",
                        "format": "int64"
                    }
                },
                "byPlatform": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "integer",
                        "format": "int64"
                    }
                },
                "recentDownloads": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.DownloadEventDTO"
                    }
                },
                "total": {
                    "type": "integer"
                },
                "withInviteCode": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_admin.GrowthDataPoint": {
            "type": "object",
            "properties": {
                "count": {
                    "type": "integer"
                },
                "cumulative": {
                    "type": "integer"
                },
                "date": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.GrowthTrendsResponse": {
            "description": "Growth trends for users and downloads",
            "type": "object",
            "properties": {
                "downloads": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.GrowthDataPoint"
                    }
                },
                "users": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.GrowthDataPoint"
                    }
                }
            }
        },
        "internal_adapter_web_admin.ListGroupsResponse": {
            "type": "object",
            "properties": {
                "groups": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.AdminGroupResponse"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_admin.ListPermissionsResponse": {
            "type": "object",
            "properties": {
                "permissions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.PermissionInfoResponse"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_admin.ListRolesResponse": {
            "type": "object",
            "properties": {
                "roles": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.RoleResponse"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_admin.ListSharesResponse": {
            "type": "object",
            "properties": {
                "shares": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.ShareInfo"
                    }
                }
            }
        },
        "internal_adapter_web_admin.ListUsersResponse": {
            "type": "object",
            "properties": {
                "total": {
                    "type": "integer"
                },
                "users": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.UserResponse"
                    }
                }
            }
        },
        "internal_adapter_web_admin.MessageResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.PermissionInfoResponse": {
            "type": "object",
            "properties": {
                "action": {
                    "type": "string"
                },
                "category": {
                    "type": "string"
                },
                "code": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "resource": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.ResetUserPasswordRequest": {
            "type": "object",
            "required": [
                "newPassword"
            ],
            "properties": {
                "newPassword": {
                    "type": "string",
                    "minLength": 6
                }
            }
        },
        "internal_adapter_web_admin.ResetUserPasswordResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.RoleResponse": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "isSystem": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updatedAt": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.SetUserQuotaRequest": {
            "type": "object",
            "properties": {
                "quotaGB": {
                    "type": "integer",
                    "minimum": 0
                }
            }
        },
        "internal_adapter_web_admin.ShareInfo": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "permission": {
                    "type": "string"
                },
                "sharedAt": {
                    "type": "string"
                },
                "sharedBy": {
                    "type": "string"
                },
                "sharedWithUserId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.ShareResourceRequest": {
            "type": "object",
            "required": [
                "ownerId",
                "resourceId",
                "resourceType",
                "sharedWithUserId"
            ],
            "properties": {
                "ownerId": {
                    "type": "string"
                },
                "permission": {
                    "type": "string",
                    "enum": [
                        "admin"
                    ]
                },
                "resourceId": {
                    "type": "string"
                },
                "resourceType": {
                    "type": "string",
                    "enum": [
                        "expense",
                        "budget",
                        "todolist",
                        "account"
                    ]
                },
                "sharedWithUserId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.StorageUsageEntry": {
            "type": "object",
            "properties": {
                "dataflowBytes": {
                    "description": "DataflowBytes is this user's dataflow diagrams and every stored version of them.\n\n🔴 It is NOT part of TotalBytes and NOT part of the quota, and that is permanent:\nthe quota is the object store's ledger, and diagram content lives in database rows\n(master 2026-08-23, \"只有 resource 才有这个限制\"). Nothing else in this system can\nsee these bytes — neither the user's quota usage nor the instance total — so this\ncolumn is the only visibility they have.\n\n⛔ Do not \"fix\" this by folding it into TotalBytes. That would silently turn a\ndeliberate exemption into a quota and start rejecting uploads for storage that was\npromised not to count.",
                    "type": "integer"
                },
                "dataflowOverThreshold": {
                    "description": "DataflowOverThreshold flags a user past dataflow.OwnerBytesWarnThreshold. There is\nno retention policy behind it — nothing is deleted and no write is blocked. It\nexists because the per-version cap limits how big one version is while nothing\nlimits how many versions there are.",
                    "type": "boolean"
                },
                "fileCount": {
                    "type": "integer"
                },
                "quotaGB": {
                    "description": "Effective quota in GB (nil = unlimited for admins)",
                    "type": "integer"
                },
                "quotaOverride": {
                    "description": "Per-user override (nil = using global default)",
                    "type": "integer"
                },
                "role": {
                    "type": "string"
                },
                "totalBytes": {
                    "type": "integer"
                },
                "userId": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.StorageUsageResponse": {
            "type": "object",
            "properties": {
                "dataflowWarnThresholdBytes": {
                    "description": "DataflowWarnThresholdBytes is the per-owner line DataflowOverThreshold is measured\nagainst, sent so the page does not have to hardcode a number the backend owns.",
                    "type": "integer"
                },
                "defaultQuotaGB": {
                    "type": "integer"
                },
                "maxFileSize": {
                    "type": "integer"
                },
                "totalBytes": {
                    "type": "integer"
                },
                "totalDataflowBytes": {
                    "description": "TotalDataflowBytes is the instance-wide diagram total, reported alongside\nTotalBytes and never added into it — see StorageUsageEntry.DataflowBytes.",
                    "type": "integer"
                },
                "totalFiles": {
                    "type": "integer"
                },
                "users": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.StorageUsageEntry"
                    }
                }
            }
        },
        "internal_adapter_web_admin.SystemInfoResponse": {
            "type": "object",
            "properties": {
                "databasePath": {
                    "type": "string"
                },
                "databaseSize": {
                    "type": "string"
                },
                "databaseType": {
                    "type": "string"
                },
                "databaseVersion": {
                    "type": "string"
                },
                "tableCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_admin.SystemStatsResponse": {
            "type": "object",
            "properties": {
                "adminUsers": {
                    "type": "integer"
                },
                "pendingQueueTasks": {
                    "type": "integer"
                },
                "regularUsers": {
                    "type": "integer"
                },
                "totalAccounts": {
                    "type": "integer"
                },
                "totalBudgets": {
                    "type": "integer"
                },
                "totalExpenses": {
                    "type": "integer"
                },
                "totalTodoItems": {
                    "type": "integer"
                },
                "totalUsers": {
                    "type": "integer"
                },
                "visitorUsers": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_admin.UnshareResourceRequest": {
            "type": "object",
            "required": [
                "resourceId",
                "resourceType",
                "sharedWithUserId"
            ],
            "properties": {
                "resourceId": {
                    "type": "string"
                },
                "resourceType": {
                    "type": "string",
                    "enum": [
                        "expense",
                        "budget",
                        "todolist",
                        "account"
                    ]
                },
                "sharedWithUserId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.UpdateRoleRequest": {
            "type": "object",
            "required": [
                "name",
                "permissions"
            ],
            "properties": {
                "description": {
                    "type": "string",
                    "maxLength": 500
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_admin.UpdateUserRequest": {
            "type": "object",
            "required": [
                "role"
            ],
            "properties": {
                "role": {
                    "type": "string",
                    "enum": [
                        "admin",
                        "user",
                        "visitor"
                    ]
                }
            }
        },
        "internal_adapter_web_admin.UserGroupInfo": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "role": {
                    "description": "'owner' or 'member'",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.UserResponse": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "groups": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.UserGroupInfo"
                    }
                },
                "id": {
                    "type": "string"
                },
                "lastSeen": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                },
                "roles": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.UserRoleInfo"
                    }
                },
                "updatedAt": {
                    "type": "string"
                },
                "userType": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.UserRoleInfo": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_admin.UserRolesResponse": {
            "type": "object",
            "properties": {
                "roles": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_admin.RoleResponse"
                    }
                },
                "userId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.AIChoice": {
            "type": "object",
            "properties": {
                "message": {
                    "$ref": "#/definitions/internal_adapter_web_ai.AIMessage"
                }
            }
        },
        "internal_adapter_web_ai.AIConfigRequest": {
            "type": "object",
            "properties": {
                "api_key": {
                    "type": "string"
                },
                "base_url": {
                    "type": "string"
                },
                "model": {
                    "type": "string"
                },
                "response_format": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.AIMessage": {
            "type": "object",
            "properties": {
                "content": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.AIResponse": {
            "type": "object",
            "properties": {
                "choices": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_ai.AIChoice"
                    }
                }
            }
        },
        "internal_adapter_web_ai.ChatMessageRequest": {
            "type": "object",
            "required": [
                "content",
                "role"
            ],
            "properties": {
                "content": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.ChatProviderResponse": {
            "type": "object",
            "properties": {
                "id": {
                    "description": "Provider ID (UUID for user/admin, \"startup\" for startup)",
                    "type": "string"
                },
                "model": {
                    "description": "Model name (if configured)",
                    "type": "string"
                },
                "name": {
                    "description": "Display name",
                    "type": "string"
                },
                "source": {
                    "description": "\"user\", \"admin\", or \"startup\"",
                    "type": "string"
                },
                "type": {
                    "description": "openai, anthropic, custom",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.ChatProvidersResponse": {
            "type": "object",
            "properties": {
                "providers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_ai.ChatProviderResponse"
                    }
                }
            }
        },
        "internal_adapter_web_ai.ContentPart": {
            "type": "object",
            "required": [
                "type"
            ],
            "properties": {
                "image_url": {
                    "$ref": "#/definitions/internal_adapter_web_ai.ImageURL"
                },
                "text": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.CreateProviderRequest": {
            "type": "object",
            "required": [
                "api_key",
                "name",
                "type"
            ],
            "properties": {
                "api_key": {
                    "type": "string"
                },
                "backend_available": {
                    "description": "Defaults to true if not specified",
                    "type": "boolean"
                },
                "capabilities": {
                    "description": "Defaults to [\"chat\",\"vision\"] if not specified",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "endpoint": {
                    "type": "string"
                },
                "frontend_available": {
                    "description": "Defaults to true if not specified",
                    "type": "boolean"
                },
                "model": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "openai",
                        "anthropic",
                        "custom"
                    ]
                }
            }
        },
        "internal_adapter_web_ai.ImageURL": {
            "type": "object",
            "required": [
                "url"
            ],
            "properties": {
                "url": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.ProviderResponse": {
            "type": "object",
            "properties": {
                "api_key": {
                    "description": "Full key (only for user's own providers)",
                    "type": "string"
                },
                "api_key_masked": {
                    "description": "Masked key (for display)",
                    "type": "string"
                },
                "backend_available": {
                    "type": "boolean"
                },
                "capabilities": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "created_at": {
                    "type": "string"
                },
                "endpoint": {
                    "type": "string"
                },
                "frontend_available": {
                    "type": "boolean"
                },
                "id": {
                    "type": "string"
                },
                "model": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "order": {
                    "type": "integer"
                },
                "source": {
                    "description": "\"user\", \"admin\", \"startup\"",
                    "type": "string"
                },
                "type": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.ProvidersListResponse": {
            "type": "object",
            "properties": {
                "providers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_ai.ProviderResponse"
                    }
                }
            }
        },
        "internal_adapter_web_ai.RefineTextRequest": {
            "type": "object",
            "required": [
                "context_type"
            ],
            "properties": {
                "context": {
                    "description": "Additional context (e.g., description when refining title)",
                    "type": "string"
                },
                "context_type": {
                    "description": "\"title\" or \"description\"",
                    "type": "string"
                },
                "text": {
                    "description": "Text to refine (optional if generating from context)",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.RefineTextResponse": {
            "type": "object",
            "properties": {
                "refined_text": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.ReorderProvidersRequest": {
            "type": "object",
            "required": [
                "provider_ids"
            ],
            "properties": {
                "provider_ids": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_ai.SetAvailabilityRequest": {
            "type": "object",
            "required": [
                "usage"
            ],
            "properties": {
                "available": {
                    "type": "boolean"
                },
                "usage": {
                    "type": "string",
                    "enum": [
                        "backend",
                        "frontend"
                    ]
                }
            }
        },
        "internal_adapter_web_ai.TextRequest": {
            "type": "object",
            "required": [
                "messages"
            ],
            "properties": {
                "config": {
                    "$ref": "#/definitions/internal_adapter_web_ai.AIConfigRequest"
                },
                "messages": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_ai.ChatMessageRequest"
                    }
                }
            }
        },
        "internal_adapter_web_ai.UpdateProviderRequest": {
            "type": "object",
            "properties": {
                "api_key": {
                    "type": "string"
                },
                "backend_available": {
                    "type": "boolean"
                },
                "capabilities": {
                    "description": "nil means no change",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "endpoint": {
                    "type": "string"
                },
                "frontend_available": {
                    "type": "boolean"
                },
                "model": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "openai",
                        "anthropic",
                        "custom"
                    ]
                }
            }
        },
        "internal_adapter_web_ai.VisionMessageRequest": {
            "type": "object",
            "required": [
                "content",
                "role"
            ],
            "properties": {
                "content": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_ai.ContentPart"
                    }
                },
                "role": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ai.VisionRequest": {
            "type": "object",
            "required": [
                "messages"
            ],
            "properties": {
                "config": {
                    "$ref": "#/definitions/internal_adapter_web_ai.AIConfigRequest"
                },
                "messages": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_ai.VisionMessageRequest"
                    }
                }
            }
        },
        "internal_adapter_web_alfred.PostMessageRequest": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "client_message_id": {
                    "description": "ClientMessageID is the idempotency key: a client that retries a send it never got\nan answer to reuses the id, and the server reports the earlier delivery instead of\nwriting the sentence twice. Optional — a client that does not retry may omit it and\nthe server mints one, which keeps the ledger's invariant (every delivery has a key)\nwithout making every caller carry uuid machinery.",
                    "type": "string"
                },
                "content": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_alfred.PostMessageResponse": {
            "type": "object",
            "properties": {
                "comment_id": {
                    "type": "string"
                },
                "created_new_root": {
                    "type": "boolean"
                },
                "root_comment_id": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_alfred.SessionResponse": {
            "type": "object",
            "properties": {
                "daemon_id": {
                    "description": "DaemonID and DaemonName describe the machine the live session runs on, both empty\nwhen nothing is running. The name is resolved here because the caller would\notherwise join it against a daemon list that may not contain the machine at all —\na session can outlive its daemon's visibility.",
                    "type": "string"
                },
                "daemon_name": {
                    "type": "string"
                },
                "live": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_alfred.StatusResponse": {
            "type": "object",
            "properties": {
                "active_thread": {
                    "description": "ActiveThread locates today's live thread — the task and root comment quick-input\nclients (web modal, desktop panel, mobile sheet) preload recent context from and\nnavigate into. Nil when the user has never spoken to Alfred; POST /alfred/messages\nopens the conversation on first send, so a client needs no create path of its own.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_alfred.ThreadRef"
                        }
                    ]
                },
                "agent_user_id": {
                    "description": "AgentUserID is the caller's OWN Alfred — the id an @mention link has to\ncarry to reach him.\n\nIt is here because the frontend used to hardcode the well-known UUID\n00000000-…-ad07 (useFirstHandshake.ts) back when that named one Alfred for\nthe whole instance. Every user has their own copy under a fresh id now, so\na hardcoded constant addresses one person's Alfred and silently reaches\nnobody for everyone else. Only the server can answer \"which one is yours\".\n\nEmpty when the caller has no copy yet — seeding is lazy — and a client must\ntreat that as \"cannot mention him yet\" rather than falling back to a\nconstant, which is the failure this field exists to remove.",
                    "type": "string"
                },
                "conversation_task_id": {
                    "description": "ConversationTaskID is the most recent chat this user has mirrored onto a task, or\nempty when they have never sent a message. Most recent rather than a list: the card\noffers one way in to the transcript, and the explorer is where someone browses the\nrest.",
                    "type": "string"
                },
                "ledger_task_id": {
                    "description": "LedgerTaskID is the agent's home task — its long-term memory, in the task's notes.\nEmpty until the first session creates it, which is the normal state for a user who\nhas only just linked an account: the UI hides the entry rather than linking to a\ntask that does not exist.",
                    "type": "string"
                },
                "session": {
                    "$ref": "#/definitions/internal_adapter_web_alfred.SessionResponse"
                }
            }
        },
        "internal_adapter_web_alfred.ThreadRef": {
            "type": "object",
            "properties": {
                "root_comment_id": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_appinfo.IMProviderResponse": {
            "type": "object",
            "properties": {
                "provider": {
                    "description": "Provider is the messenger name, e.g. \"telegram\".",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_appinfo.InfoResponse": {
            "type": "object",
            "properties": {
                "capabilities": {
                    "description": "Capabilities names the optional API behaviours this build has, so a client can ask\ninstead of assume. See the Capability constants for the vocabulary.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "frontend_url": {
                    "description": "FrontendURL is the canonical base for links this server generates (share links,\ninvites). Electron needs it because its own origin is file://.",
                    "type": "string"
                },
                "im_providers": {
                    "description": "IMProviders lists the messengers a user can connect their own bot to on this server.\nIt is a statement about the build, not about any bot: under BYO bots there is no\ninstance-wide messenger connection to report on, and a bot's handle and health belong\nto the user who registered it.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_appinfo.IMProviderResponse"
                    }
                },
                "public_share_enabled": {
                    "description": "PublicShareEnabled reports whether the operator allows unauthenticated share links.",
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_assignment.AssignRequestDTO": {
            "type": "object",
            "properties": {
                "assignee": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_assignment.MemberDTO": {
            "type": "object",
            "properties": {
                "display_name": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                },
                "user_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_assignment.RowDTO": {
            "type": "object",
            "properties": {
                "member": {
                    "$ref": "#/definitions/internal_adapter_web_assignment.MemberDTO"
                },
                "tasks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_assignment.TaskRefDTO"
                    }
                }
            }
        },
        "internal_adapter_web_assignment.TaskRefDTO": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "last_session_at": {
                    "type": "string"
                },
                "last_session_status": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.ApiKeyInfo": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "expiresAt": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "lastUsedAt": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "permissions": {
                    "description": "Selected permissions for this API key",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updatedAt": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.CreateApiKeyRequest": {
            "type": "object",
            "required": [
                "name",
                "permissions"
            ],
            "properties": {
                "expiresIn": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "permissions": {
                    "description": "Selected permissions for this API key",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_auth.CreateApiKeyResponse": {
            "type": "object",
            "properties": {
                "apiKey": {
                    "type": "string"
                },
                "keyInfo": {
                    "$ref": "#/definitions/internal_adapter_web_auth.ApiKeyInfo"
                }
            }
        },
        "internal_adapter_web_auth.CreateUserRequest": {
            "type": "object",
            "required": [
                "password",
                "username"
            ],
            "properties": {
                "password": {
                    "type": "string"
                },
                "role": {
                    "description": "Optional: defaults to \"user\" if not provided",
                    "type": "string"
                },
                "timezone": {
                    "description": "Optional: defaults to \"Asia/Shanghai\" if not provided",
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.CreateUserResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                },
                "timezone": {
                    "type": "string"
                },
                "userId": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.DefaultCredentials": {
            "type": "object",
            "properties": {
                "password": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.DeleteAccountRequest": {
            "type": "object",
            "required": [
                "password"
            ],
            "properties": {
                "password": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.DeleteAccountResponse": {
            "type": "object",
            "properties": {
                "agents_retired": {
                    "type": "integer"
                },
                "blobs_deleted": {
                    "type": "integer"
                },
                "by_table": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "integer",
                        "format": "int64"
                    }
                },
                "groups_closed": {
                    "type": "integer"
                },
                "message": {
                    "type": "string"
                },
                "rows_deleted": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_auth.GitHubAuthorizeResponse": {
            "type": "object",
            "properties": {
                "authorizationUrl": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GitHubCallbackRequest": {
            "type": "object",
            "required": [
                "code",
                "state"
            ],
            "properties": {
                "code": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GitHubCallbackResponse": {
            "type": "object",
            "properties": {
                "accessToken": {
                    "description": "Success case: tokens and user info",
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "linkingState": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "refreshToken": {
                    "type": "string"
                },
                "requiresLinking": {
                    "description": "Linking case: requires password",
                    "type": "boolean"
                },
                "userAvatarUrl": {
                    "type": "string"
                },
                "userEmail": {
                    "type": "string"
                },
                "userId": {
                    "type": "string"
                },
                "userName": {
                    "type": "string"
                },
                "userRole": {
                    "type": "string"
                },
                "userTimezone": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GitHubEnabledResponse": {
            "type": "object",
            "properties": {
                "enabled": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_auth.GitHubLinkRequest": {
            "type": "object",
            "required": [
                "linkingState",
                "password"
            ],
            "properties": {
                "linkingState": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GoogleAuthorizeResponse": {
            "type": "object",
            "properties": {
                "authorizationUrl": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GoogleCallbackRequest": {
            "type": "object",
            "required": [
                "code",
                "state"
            ],
            "properties": {
                "code": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GoogleCallbackResponse": {
            "type": "object",
            "properties": {
                "accessToken": {
                    "description": "Success case: tokens and user info",
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "linkingState": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "refreshToken": {
                    "type": "string"
                },
                "requiresLinking": {
                    "description": "Linking case: requires password",
                    "type": "boolean"
                },
                "userAvatarUrl": {
                    "type": "string"
                },
                "userEmail": {
                    "type": "string"
                },
                "userId": {
                    "type": "string"
                },
                "userName": {
                    "type": "string"
                },
                "userRole": {
                    "type": "string"
                },
                "userTimezone": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.GoogleEnabledResponse": {
            "type": "object",
            "properties": {
                "enabled": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_auth.GoogleLinkRequest": {
            "type": "object",
            "required": [
                "linkingState",
                "password"
            ],
            "properties": {
                "linkingState": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.IdentityProviderRequest": {
            "type": "object",
            "required": [
                "client_id",
                "domain",
                "redirect_url",
                "type"
            ],
            "properties": {
                "client_id": {
                    "type": "string"
                },
                "client_secret": {
                    "type": "string"
                },
                "domain": {
                    "type": "string"
                },
                "enabled": {
                    "type": "boolean"
                },
                "frontend_url": {
                    "type": "string"
                },
                "redirect_url": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.IdentityProviderResponse": {
            "type": "object",
            "properties": {
                "client_id": {
                    "type": "string"
                },
                "client_secret": {
                    "description": "Masked",
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "domain": {
                    "type": "string"
                },
                "enabled": {
                    "type": "boolean"
                },
                "frontend_url": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "redirect_url": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.InviteCodeResponse": {
            "type": "object",
            "properties": {
                "inviteCode": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.LicenseInfoResponse": {
            "type": "object",
            "properties": {
                "customer_name": {
                    "description": "V2: UserName from license",
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "features": {
                    "type": "object",
                    "additionalProperties": true
                },
                "issued_at": {
                    "type": "string"
                },
                "tier": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.LinkedProviderResponse": {
            "type": "object",
            "properties": {
                "provider": {
                    "type": "string"
                },
                "providerAvatar": {
                    "type": "string"
                },
                "providerEmail": {
                    "type": "string"
                },
                "providerUsername": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.LoginV2Response": {
            "type": "object",
            "properties": {
                "accessToken": {
                    "type": "string"
                },
                "refreshToken": {
                    "type": "string"
                },
                "userAvatarUrl": {
                    "type": "string"
                },
                "userEmail": {
                    "type": "string"
                },
                "userId": {
                    "type": "string"
                },
                "userName": {
                    "type": "string"
                },
                "userRole": {
                    "type": "string"
                },
                "userTimezone": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.PasswordStatusResponse": {
            "type": "object",
            "properties": {
                "hasPassword": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_auth.ProfileResponse": {
            "type": "object",
            "properties": {
                "avatarUrl": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "exp": {
                    "type": "integer"
                },
                "iat": {
                    "type": "integer"
                },
                "role": {
                    "type": "string"
                },
                "sub": {
                    "type": "string"
                },
                "tier": {
                    "description": "Subscription tier (personal/pro/max)",
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.RefreshTokenRequest": {
            "type": "object",
            "required": [
                "refreshToken"
            ],
            "properties": {
                "refreshToken": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.RefreshTokenResponse": {
            "type": "object",
            "properties": {
                "accessToken": {
                    "type": "string"
                },
                "refreshToken": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.RegisterRequest": {
            "type": "object",
            "required": [
                "inviteCode",
                "password",
                "username"
            ],
            "properties": {
                "inviteCode": {
                    "type": "string"
                },
                "language": {
                    "description": "Optional language preference (e.g., \"en\", \"zh\")",
                    "type": "string"
                },
                "password": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.RegisterResponse": {
            "type": "object",
            "properties": {
                "timezone": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.SignInRequest": {
            "type": "object",
            "required": [
                "password",
                "username"
            ],
            "properties": {
                "password": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.TierInfoResponse": {
            "type": "object",
            "properties": {
                "auto_login": {
                    "type": "boolean"
                },
                "default_credentials": {
                    "$ref": "#/definitions/internal_adapter_web_auth.DefaultCredentials"
                },
                "display_name": {
                    "type": "string"
                },
                "features": {
                    "type": "object",
                    "additionalProperties": true
                },
                "github_oauth_enabled": {
                    "type": "boolean"
                },
                "google_oauth_enabled": {
                    "type": "boolean"
                },
                "message": {
                    "type": "string"
                },
                "registration_enabled": {
                    "description": "RegistrationEnabled reports whether this instance accepts self-service\nsignups. It rides on tier-info because that is already the public endpoint\nthe login page reads to learn what the instance allows — the alternative was\na second unauthenticated round trip saying one bool. The page uses it to\ndecide what to render; the backend still refuses on its own authority, so a\nclient working from a stale cache is wrong about the button, never about the\noutcome.",
                    "type": "boolean"
                },
                "tier": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.UpdateAvatarRequest": {
            "type": "object",
            "required": [
                "avatarUrl"
            ],
            "properties": {
                "avatarUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.UpdateAvatarResponse": {
            "type": "object",
            "properties": {
                "avatarUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.UpdatePasswordRequest": {
            "description": "Request to update user password. If user has existing password, oldPassword is required.",
            "type": "object",
            "required": [
                "confirmPassword",
                "newPassword"
            ],
            "properties": {
                "confirmPassword": {
                    "type": "string"
                },
                "newPassword": {
                    "type": "string"
                },
                "oldPassword": {
                    "description": "Required only if user has existing password",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_auth.UpdatePasswordResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_backup.BackupDownloadResponse": {
            "type": "object",
            "properties": {
                "download_url": {
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "file_name": {
                    "type": "string"
                },
                "file_size": {
                    "type": "integer"
                },
                "mime_type": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_backup.BackupJobDTO": {
            "type": "object",
            "properties": {
                "can_download": {
                    "type": "boolean"
                },
                "completed_at": {
                    "type": "string"
                },
                "error_message": {
                    "type": "string"
                },
                "file_name": {
                    "type": "string"
                },
                "file_size": {
                    "type": "integer"
                },
                "id": {
                    "type": "string"
                },
                "job_id": {
                    "type": "string"
                },
                "original_name": {
                    "type": "string"
                },
                "resource_id": {
                    "type": "string"
                },
                "started_at": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "triggered_at": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_backup.BackupListResponse": {
            "type": "object",
            "properties": {
                "backups": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_backup.BackupJobDTO"
                    }
                },
                "has_pending": {
                    "type": "boolean"
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_backup.ManualBackupRequest": {
            "type": "object",
            "properties": {
                "file_name": {
                    "type": "string",
                    "maxLength": 100
                }
            }
        },
        "internal_adapter_web_backup.ManualBackupResponse": {
            "type": "object",
            "properties": {
                "duration": {
                    "type": "integer"
                },
                "file_count": {
                    "type": "integer"
                },
                "file_name": {
                    "type": "string"
                },
                "file_size": {
                    "type": "integer"
                },
                "job_id": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "triggered_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.BudgetPlanResponseDTO": {
            "type": "object",
            "required": [
                "amount",
                "effectiveFrom",
                "frequency"
            ],
            "properties": {
                "amount": {
                    "$ref": "#/definitions/internal_adapter_web_budget.MoneyDTO"
                },
                "effectiveFrom": {
                    "type": "string"
                },
                "effectiveTo": {
                    "type": "string"
                },
                "frequency": {
                    "type": "string"
                },
                "reason": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.BudgetResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "hidden",
                "id",
                "initialAmount",
                "name",
                "oneTimeAdjustments",
                "ownerId",
                "plans",
                "startsAt",
                "updated_at"
            ],
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "groupId": {
                    "type": "string"
                },
                "groupPermission": {
                    "type": "string"
                },
                "hidden": {
                    "type": "boolean"
                },
                "id": {
                    "type": "string"
                },
                "initialAmount": {
                    "$ref": "#/definitions/internal_adapter_web_budget.MoneyDTO"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "oneTimeAdjustments": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_budget.OneTimeAdjustmentDTO"
                    }
                },
                "ownerId": {
                    "type": "string"
                },
                "plans": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_budget.BudgetPlanResponseDTO"
                    }
                },
                "startsAt": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.CreateBudgetDTO": {
            "type": "object",
            "required": [
                "name",
                "plan"
            ],
            "properties": {
                "hidden": {
                    "type": "boolean"
                },
                "initialAmount": {
                    "description": "Use float64 to match TypeScript DTO",
                    "type": "number"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                },
                "plan": {
                    "$ref": "#/definitions/internal_adapter_web_budget.SimpleBudgetPlanDTO"
                },
                "startsAt": {
                    "description": "ISO date string",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.CreateBudgetPlanDTO": {
            "type": "object",
            "required": [
                "amount",
                "effectiveFrom",
                "frequency"
            ],
            "properties": {
                "amount": {
                    "type": "number",
                    "minimum": 0
                },
                "effectiveFrom": {
                    "description": "ISO date string",
                    "type": "string"
                },
                "effectiveTo": {
                    "description": "Optional ISO date string",
                    "type": "string"
                },
                "frequency": {
                    "type": "string",
                    "enum": [
                        "daily",
                        "weekly",
                        "monthly",
                        "yearly"
                    ]
                },
                "reason": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.CreateOneTimeAdjustmentDTO": {
            "type": "object",
            "required": [
                "adjustmentDate",
                "amount"
            ],
            "properties": {
                "adjustmentDate": {
                    "description": "ISO date string",
                    "type": "string"
                },
                "amount": {
                    "type": "number"
                },
                "reason": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.LedgerEventDTO": {
            "type": "object",
            "properties": {
                "amount": {
                    "description": "signed, in currency units (not cents)",
                    "type": "number"
                },
                "date": {
                    "type": "string"
                },
                "frequency": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "runningTotal": {
                    "description": "in currency units",
                    "type": "number"
                },
                "type": {
                    "description": "\"initial\", \"plan\", \"adjustment\"",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.LedgerResponseDTO": {
            "type": "object",
            "properties": {
                "events": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_budget.LedgerEventDTO"
                    }
                },
                "referenceDate": {
                    "type": "string"
                },
                "total": {
                    "type": "number"
                }
            }
        },
        "internal_adapter_web_budget.MoneyDTO": {
            "type": "object",
            "required": [
                "amount",
                "currency"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.OneTimeAdjustmentDTO": {
            "type": "object",
            "required": [
                "adjustmentDate",
                "amount"
            ],
            "properties": {
                "adjustmentDate": {
                    "description": "ISO date string for requests",
                    "type": "string"
                },
                "amount": {
                    "$ref": "#/definitions/internal_adapter_web_budget.MoneyDTO"
                },
                "createdAt": {
                    "description": "Present in responses",
                    "type": "string"
                },
                "id": {
                    "description": "Present in responses, not in requests",
                    "type": "string"
                },
                "reason": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.ShareToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" for read, \"rw\" for read-write, \"\" for none",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_budget.SimpleBudgetPlanDTO": {
            "type": "object",
            "required": [
                "amount",
                "frequency"
            ],
            "properties": {
                "amount": {
                    "type": "number",
                    "minimum": 0
                },
                "frequency": {
                    "type": "string",
                    "enum": [
                        "monthly",
                        "weekly",
                        "quarterly",
                        "yearly"
                    ]
                }
            }
        },
        "internal_adapter_web_budget.UpdateBudgetDTO": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "hidden": {
                    "description": "Optional field for updating hidden status",
                    "type": "boolean"
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                }
            }
        },
        "internal_adapter_web_dataflow.CreateDataflowDTO": {
            "type": "object",
            "required": [
                "data",
                "name"
            ],
            "properties": {
                "data": {
                    "description": "Data is the graph JSON as a string, not as a nested object. It is stored and\nreturned byte for byte; decoding it into a map here would silently rewrite values\n(0755 -\u003e 493, 1.10 -\u003e 1.1) on the way through.",
                    "type": "string"
                },
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "description": "EntityType/EntityID attach the diagram to something as it is created — the same\npair prepareResourceUpload takes. One call, so a diagram cannot be created and then\nstranded by a failed second request.",
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowLinkDTO": {
            "type": "object",
            "required": [
                "entityId",
                "entityType"
            ],
            "properties": {
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowListResponseDTO": {
            "type": "object",
            "properties": {
                "dataflows": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowResourceURLDTO": {
            "type": "object",
            "properties": {
                "presignedUrl": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowResponseDTO": {
            "type": "object",
            "properties": {
                "contentHash": {
                    "type": "string"
                },
                "createdAt": {
                    "type": "string"
                },
                "createdBy": {
                    "type": "string"
                },
                "data": {
                    "type": "string"
                },
                "format": {
                    "type": "string"
                },
                "groupId": {
                    "type": "string"
                },
                "groupPermission": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "ownerId": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "rulesetVersion": {
                    "type": "integer"
                },
                "sizeBytes": {
                    "type": "integer"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updatedAt": {
                    "type": "string"
                },
                "updatedBy": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowVersionContentDTO": {
            "type": "object",
            "properties": {
                "contentHash": {
                    "type": "string"
                },
                "createdAt": {
                    "type": "string"
                },
                "createdBy": {
                    "type": "string"
                },
                "data": {
                    "type": "string"
                },
                "dataflowId": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "rulesetVersion": {
                    "type": "integer"
                },
                "sizeBytes": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowVersionDTO": {
            "type": "object",
            "properties": {
                "contentHash": {
                    "type": "string"
                },
                "createdAt": {
                    "type": "string"
                },
                "createdBy": {
                    "type": "string"
                },
                "dataflowId": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "notRollbackableReason": {
                    "description": "NotRollbackableReason is an error code (e.g. DATAFLOW_INLINE_DATA_URI), empty when\nRollbackable. A code, not prose, so the client can translate it.",
                    "type": "string"
                },
                "rollbackable": {
                    "description": "Rollbackable says whether this version still satisfies the current content rules.\nIt is answered here, in the list, rather than when the button is pressed: people\nreach for a rollback after something has gone wrong, and that is the worst moment\nto hand them a surprise failure.",
                    "type": "boolean"
                },
                "rulesetVersion": {
                    "type": "integer"
                },
                "sizeBytes": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_dataflow.DataflowVersionListResponseDTO": {
            "type": "object",
            "properties": {
                "versions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_dataflow.DataflowVersionDTO"
                    }
                }
            }
        },
        "internal_adapter_web_dataflow.ShareDataflowDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "type": "string"
                },
                "permission": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_dataflow.UpdateDataflowDTO": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_download_metrics.TrackDownloadRequest": {
            "description": "Request to track an app download",
            "type": "object",
            "required": [
                "cdn",
                "platform",
                "version"
            ],
            "properties": {
                "cdn": {
                    "description": "e.g., \"r2\"",
                    "type": "string"
                },
                "inviteCode": {
                    "description": "Optional: inviter's user ID",
                    "type": "string"
                },
                "platform": {
                    "description": "e.g., \"macos-arm64\", \"macos-x64\", \"windows-x64\"",
                    "type": "string"
                },
                "version": {
                    "description": "e.g., \"0.16.8\"",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_entity_lookup.EntityResponse": {
            "type": "object",
            "properties": {
                "data": {},
                "id": {
                    "type": "string"
                },
                "type": {
                    "description": "\"todolist\", \"budget\", \"expense\", \"kanban_board\", \"file\"",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_expense.CreateExpenseDTO": {
            "type": "object",
            "required": [
                "amount"
            ],
            "properties": {
                "amount": {
                    "$ref": "#/definitions/internal_adapter_web_expense.MoneyDTO"
                },
                "budgetId": {
                    "type": "string"
                },
                "description": {
                    "type": "string",
                    "maxLength": 1000
                },
                "hidden": {
                    "type": "boolean"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "occurredAt": {
                    "type": "string"
                },
                "payByAccount": {
                    "type": "string"
                },
                "resourceId": {
                    "description": "PRIMARY: AI source resource",
                    "type": "string"
                },
                "title": {
                    "type": "string",
                    "maxLength": 255
                }
            }
        },
        "internal_adapter_web_expense.ExpenseListResponseDTO": {
            "type": "object",
            "required": [
                "expenses"
            ],
            "properties": {
                "expenses": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_expense.ExpenseResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_expense.ExpenseResponseDTO": {
            "type": "object",
            "required": [
                "amount",
                "created_at",
                "created_by",
                "currency",
                "id",
                "updated_at",
                "updated_by"
            ],
            "properties": {
                "amount": {
                    "type": "number"
                },
                "budgetId": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "currency": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "occurredAt": {
                    "type": "string"
                },
                "payByAccount": {
                    "type": "string"
                },
                "resourceId": {
                    "description": "PRIMARY: AI source resource",
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_expense.MoneyDTO": {
            "type": "object",
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_expense.ShareToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" for read, \"rw\" for read-write, \"\" for none",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_expense.UpdateExpenseDTO": {
            "type": "object",
            "properties": {
                "amount": {
                    "$ref": "#/definitions/internal_adapter_web_expense.MoneyDTO"
                },
                "budgetId": {
                    "type": "string"
                },
                "description": {
                    "type": "string",
                    "maxLength": 1000
                },
                "hidden": {
                    "type": "boolean"
                },
                "occurredAt": {
                    "type": "string"
                },
                "payByAccount": {
                    "type": "string"
                },
                "resourceId": {
                    "description": "PRIMARY: AI source resource",
                    "type": "string"
                },
                "title": {
                    "type": "string",
                    "maxLength": 255
                }
            }
        },
        "internal_adapter_web_expense_from_text.CreateFromTextDTO": {
            "type": "object",
            "required": [
                "text"
            ],
            "properties": {
                "text": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_expense_from_text.CreateFromTextResponseDTO": {
            "type": "object",
            "properties": {
                "amount": {
                    "description": "Amount in dollars (converted from cents)",
                    "type": "number"
                },
                "budget_id": {
                    "type": "string"
                },
                "currency": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "occurred_at": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_expense_from_vision.ProcessTaskResponseDTO": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "expenseId": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "processingMethod": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_expense_from_vision.UploadImageResponseDTO": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "taskId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_explorer.ExplorerItemDTO": {
            "type": "object",
            "properties": {
                "deadline": {
                    "type": "string"
                },
                "deleted": {
                    "description": "Sync fields",
                    "type": "boolean"
                },
                "fileSize": {
                    "type": "integer"
                },
                "id": {
                    "type": "string"
                },
                "mimeType": {
                    "description": "Resource-specific fields",
                    "type": "string"
                },
                "name": {
                    "description": "title for tasks, originalName for resources",
                    "type": "string"
                },
                "path": {
                    "description": "nil = unfiled, \"/\" = root, \"/folder/\" = nested",
                    "type": "string"
                },
                "status": {
                    "description": "Task-specific fields",
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "type": {
                    "description": "\"task\" or \"resource\"",
                    "type": "string"
                },
                "updatedAt": {
                    "description": "last modification time (nil when unknown)",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_explorer.UnifiedExplorerResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_explorer.ExplorerItemDTO"
                    }
                },
                "syncToken": {
                    "description": "Server timestamp for next incremental sync",
                    "type": "string"
                },
                "total": {
                    "description": "Number of items in this response",
                    "type": "integer"
                },
                "totalCount": {
                    "description": "Total active items on server (for validation)",
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_feel_lucky.FeelLuckyResponseDTO": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.AddMemberRequest": {
            "type": "object",
            "properties": {
                "identifier": {
                    "type": "string"
                },
                "user_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.CreateGroupRequest": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "description": {
                    "type": "string",
                    "maxLength": 500
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                }
            }
        },
        "internal_adapter_web_group.CreateInviteRequest": {
            "type": "object",
            "properties": {
                "expires_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.GroupInviteResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "group_id": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "token": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.GroupMemberResponse": {
            "type": "object",
            "properties": {
                "avatar_url": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "joined_at": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                },
                "soul_owner_id": {
                    "description": "SoulOwnerID / SoulOwnerName name the person who maintains this agent's soul\n— its prompt, skills and defaults (agent.AgentConfig.OwnerID). Both are\nempty on a human row.\n\n\"Who maintains it\" is the fact a group needs about an agent that it does not\nneed about a person: an agent in a group is a thing other members may summon,\nand its behaviour is whatever ONE person decides. Showing that person is what\nmakes the row accountable to someone.\n\nThe name is resolved from this same member list and nothing else (see\nToGroupMemberResponses). In v1 that always resolves, because the only way an\nagent gets in is its own owner adding it while managing the group — so the\nowner is a member by construction. If that ever stops holding, the name comes\nback empty rather than wrong, and no new user-directory lookup was introduced\nto make it resolve: this endpoint must not become a way to turn a uuid into a\nname for a person you cannot already see.",
                    "type": "string"
                },
                "soul_owner_name": {
                    "type": "string"
                },
                "type": {
                    "description": "Type is \"human\" or \"agent\", and is the ONLY thing a client may branch on to\ntell them apart. It is stated rather than inferable on purpose: what the UI\ndid before was guess — `username.includes('svc') || email.includes('@internal')`\n— which reads an agent's INTERNAL KEY, the one thing C1 minted so that no\nreader would ever have to. That guess also fails now by construction, since\nthis DTO drops an agent's email (see ToGroupMemberResponse), so the member\nlist would have rendered every agent as an ordinary person.",
                    "type": "string"
                },
                "user_id": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.GroupResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.GroupWithMembersResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "member_count": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_group.InviteInfoResponse": {
            "type": "object",
            "properties": {
                "expires_at": {
                    "type": "string"
                },
                "group_description": {
                    "type": "string"
                },
                "group_name": {
                    "type": "string"
                },
                "is_valid": {
                    "type": "boolean"
                },
                "member_count": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_group.UpdateGroupRequest": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "description": {
                    "type": "string",
                    "maxLength": 500
                },
                "name": {
                    "type": "string",
                    "maxLength": 100,
                    "minLength": 1
                }
            }
        },
        "internal_adapter_web_imbot.BotResponse": {
            "type": "object",
            "properties": {
                "bot_username": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "last_error": {
                    "description": "LastError is the messenger's own words for the most recent failure, empty while\nhealthy. Safe for its owner to read: it describes their credential, never contains it.",
                    "type": "string"
                },
                "masked_token": {
                    "type": "string"
                },
                "provider": {
                    "type": "string"
                },
                "state": {
                    "description": "State is the supervision state of this bot's connection: \"starting\", \"running\",\n\"retrying\" or \"token_rejected\". It is per-user, unlike the old instance-wide\nprovider state, because each user's bot fails and recovers on its own.",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_imbot.BotStatusResponse": {
            "type": "object",
            "properties": {
                "bot": {
                    "description": "Bot is null when the caller has not registered one.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_imbot.BotResponse"
                        }
                    ]
                },
                "cap_reached": {
                    "description": "CapReached reports that the instance is at its limit of registered bots. Only\nmeaningful to a user who has none: replacing a token on an existing bot is always\nallowed, since it adds no connection.",
                    "type": "boolean"
                },
                "encryption_configured": {
                    "description": "EncryptionConfigured reports whether this instance can store a token at all\n(UD_ENCRYPTION_KEY). False replaces the whole section with an explanation.",
                    "type": "boolean"
                },
                "multi_user_allowed": {
                    "description": "MultiUserAllowed reports whether the IM access gate admits this user right now.\nFalse for a non-owner while im.multi_user_enabled is off.",
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_imbot.SetTokenRequest": {
            "type": "object",
            "required": [
                "token"
            ],
            "properties": {
                "provider": {
                    "description": "Provider defaults to telegram, the only messenger with an implementation today.\nPresent so a second messenger needs no new route.",
                    "type": "string"
                },
                "token": {
                    "description": "Token is the credential from @BotFather. Required. It is verified against the\nmessenger before anything is stored, and it is never returned by any endpoint.",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_imlink.IdentityListResponse": {
            "type": "object",
            "properties": {
                "identities": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_imlink.IdentityResponse"
                    }
                }
            }
        },
        "internal_adapter_web_imlink.IdentityResponse": {
            "type": "object",
            "properties": {
                "external_username": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "linked_at": {
                    "type": "string"
                },
                "provider": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_imlink.LinkCodeResponse": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "expires_in_seconds": {
                    "description": "ExpiresInSeconds saves the UI a clock comparison against a server timestamp, which\nis the one thing a countdown must not get wrong on a device with a skewed clock.",
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_income.CreateIncomeDTO": {
            "type": "object",
            "required": [
                "amount",
                "title"
            ],
            "properties": {
                "accountId": {
                    "type": "string"
                },
                "amount": {
                    "$ref": "#/definitions/internal_adapter_web_income.MoneyDTO"
                },
                "description": {
                    "type": "string",
                    "maxLength": 1000
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "occurredAt": {
                    "type": "string"
                },
                "source": {
                    "type": "string",
                    "maxLength": 100
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string",
                    "maxLength": 255
                }
            }
        },
        "internal_adapter_web_income.IncomeListResponseDTO": {
            "type": "object",
            "properties": {
                "incomes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_income.IncomeResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_income.IncomeResponseDTO": {
            "type": "object",
            "properties": {
                "accountId": {
                    "type": "string"
                },
                "amount": {
                    "type": "number"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "currency": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "occurredAt": {
                    "type": "string"
                },
                "ownerId": {
                    "type": "string"
                },
                "source": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_income.MoneyDTO": {
            "type": "object",
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_income.ShareToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" for read, \"rw\" for read-write, \"\" for none",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_income.UpdateIncomeDTO": {
            "type": "object",
            "properties": {
                "accountId": {
                    "type": "string"
                },
                "amount": {
                    "$ref": "#/definitions/internal_adapter_web_income.MoneyDTO"
                },
                "description": {
                    "type": "string",
                    "maxLength": 1000
                },
                "hidden": {
                    "type": "boolean"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "occurredAt": {
                    "type": "string"
                },
                "source": {
                    "type": "string",
                    "maxLength": 100
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string",
                    "maxLength": 255
                }
            }
        },
        "internal_adapter_web_invitation.AcceptInvitationResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "redirect_url": {
                    "type": "string"
                },
                "resource_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_invitation.CreateShareLinkRequest": {
            "type": "object",
            "properties": {
                "expires_in_days": {
                    "description": "Optional expiration in days",
                    "type": "integer",
                    "maximum": 365,
                    "minimum": 1
                },
                "max_uses": {
                    "description": "Optional max uses",
                    "type": "integer",
                    "maximum": 100,
                    "minimum": 1
                },
                "permission": {
                    "description": "Permission level (defaults to admin)",
                    "type": "string",
                    "enum": [
                        "admin",
                        "write",
                        "read"
                    ]
                }
            }
        },
        "internal_adapter_web_invitation.InvitationDetailsResponse": {
            "type": "object",
            "properties": {
                "active": {
                    "type": "boolean"
                },
                "can_accept": {
                    "type": "boolean"
                },
                "expires_at": {
                    "type": "string"
                },
                "is_expired": {
                    "type": "boolean"
                },
                "owner_name": {
                    "description": "Will be fetched from user service",
                    "type": "string"
                },
                "permission": {
                    "type": "string"
                },
                "resource_id": {
                    "type": "string"
                },
                "resource_name": {
                    "description": "Will be fetched from resource",
                    "type": "string"
                },
                "resource_type": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_invitation.ShareLinkInfo": {
            "type": "object",
            "properties": {
                "active": {
                    "type": "boolean"
                },
                "created_at": {
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "invitation_id": {
                    "type": "string"
                },
                "link": {
                    "type": "string"
                },
                "max_uses": {
                    "type": "integer"
                },
                "permission": {
                    "type": "string"
                },
                "used_count": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_invitation.ShareLinkListResponse": {
            "type": "object",
            "properties": {
                "share_links": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_invitation.ShareLinkInfo"
                    }
                }
            }
        },
        "internal_adapter_web_invitation.ShareLinkResponse": {
            "type": "object",
            "properties": {
                "expires_at": {
                    "type": "string"
                },
                "invitation_id": {
                    "type": "string"
                },
                "max_uses": {
                    "type": "integer"
                },
                "permission": {
                    "type": "string"
                },
                "token": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.BoardListResponse": {
            "type": "object",
            "properties": {
                "owned_boards": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.BoardWithMetaResponse"
                    }
                },
                "shared_boards": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.BoardWithMetaResponse"
                    }
                }
            }
        },
        "internal_adapter_web_kanban.BoardResponse": {
            "type": "object",
            "properties": {
                "board_type": {
                    "description": "\"private\" or \"shared\"",
                    "type": "string"
                },
                "columns": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.KanbanColumnDTO"
                    }
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "default_tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "group_id": {
                    "type": "string"
                },
                "group_permission": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "project_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.BoardTasksResponse": {
            "type": "object",
            "properties": {
                "board": {
                    "$ref": "#/definitions/internal_adapter_web_kanban.BoardResponse"
                },
                "column_counts": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "integer",
                        "format": "int64"
                    }
                },
                "column_tasks": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "array",
                        "items": {
                            "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.TodolistItemResponseDTO"
                        }
                    }
                }
            }
        },
        "internal_adapter_web_kanban.BoardWithMetaResponse": {
            "type": "object",
            "properties": {
                "board_type": {
                    "description": "\"private\" or \"shared\"",
                    "type": "string"
                },
                "columns": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.KanbanColumnDTO"
                    }
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "default_tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "group_id": {
                    "type": "string"
                },
                "group_permission": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "is_owner": {
                    "type": "boolean"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "project_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.ColumnActionDTO": {
            "type": "object",
            "properties": {
                "field": {
                    "description": "Field to update: \"status\", \"tags\", \"cf.xxx\"",
                    "type": "string"
                },
                "operation": {
                    "description": "\"set\", \"add\", \"remove\", \"clear\"",
                    "type": "string"
                },
                "source": {
                    "description": "\"query\" (auto-generated) or \"manual\"",
                    "type": "string"
                },
                "trigger": {
                    "description": "\"enter\" or \"exit\"",
                    "type": "string"
                },
                "value": {
                    "description": "Value to apply",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.CreateBoardRequest": {
            "type": "object",
            "required": [
                "board_type",
                "name"
            ],
            "properties": {
                "board_type": {
                    "description": "\"private\" or \"shared\"",
                    "type": "string"
                },
                "columns": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.KanbanColumnDTO"
                    }
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.CreateTaskInBoardRequest": {
            "type": "object",
            "required": [
                "title"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "derived_from_id": {
                    "description": "Optional: parent task this is derived from",
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "linked_to_ids": {
                    "description": "Optional: tasks to link on creation",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "metadata": {
                    "description": "Custom fields (e.g., cf.priority)",
                    "type": "object",
                    "additionalProperties": {}
                },
                "resourceIds": {
                    "description": "Resources to link after task creation (e.g., images uploaded during creation)",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.KanbanColumnDTO": {
            "type": "object",
            "properties": {
                "actions": {
                    "description": "Actions for enter/exit",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.ColumnActionDTO"
                    }
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "order": {
                    "type": "integer"
                },
                "query": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.PreviewColumnActionsRequest": {
            "type": "object",
            "properties": {
                "query": {
                    "description": "Column query, e.g. \"status = 'todo' AND tags CONTAINS 'work'\"",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.PreviewColumnActionsResponse": {
            "type": "object",
            "properties": {
                "actions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.ColumnActionDTO"
                    }
                }
            }
        },
        "internal_adapter_web_kanban.QueryBoardTasksRequest": {
            "type": "object",
            "properties": {
                "page": {
                    "type": "integer"
                },
                "page_size": {
                    "type": "integer"
                },
                "query": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.QueryBoardTasksResponse": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_adapter_web_todolist.TodolistItemResponseDTO"
                    }
                },
                "page": {
                    "type": "integer"
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_kanban.RefineTextRequest": {
            "type": "object",
            "required": [
                "context_type"
            ],
            "properties": {
                "context": {
                    "description": "Additional context (e.g., description when refining title)",
                    "type": "string"
                },
                "context_type": {
                    "description": "\"title\" or \"description\"",
                    "type": "string"
                },
                "text": {
                    "description": "Text to refine (optional if generating from context)",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.RefineTextResponse": {
            "type": "object",
            "properties": {
                "refined_text": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.ShareBoardRequest": {
            "type": "object",
            "required": [
                "group_id",
                "permission"
            ],
            "properties": {
                "group_id": {
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" or \"rw\"",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_kanban.UpdateBoardRequest": {
            "type": "object",
            "properties": {
                "columns": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_kanban.KanbanColumnDTO"
                    }
                },
                "default_tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "project_id": {
                    "description": "Set to \"\" to clear, or project UUID to set",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_license_gen.DecodeResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "expired": {
                    "type": "boolean"
                },
                "payload": {
                    "$ref": "#/definitions/github_com_undercontrol_backend_internal_license.LicensePayload"
                },
                "signature_valid": {
                    "type": "boolean"
                },
                "valid_until": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_license_gen.GenerateRequest": {
            "type": "object",
            "required": [
                "secret"
            ],
            "properties": {
                "max_users": {
                    "description": "Maximum users allowed, 0 = unlimited",
                    "type": "integer"
                },
                "secret": {
                    "type": "string"
                },
                "tier": {
                    "type": "string"
                },
                "user_name": {
                    "type": "string"
                },
                "valid_days": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_license_gen.GenerateResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "license": {
                    "type": "string"
                },
                "max_users": {
                    "description": "Maximum users allowed, 0 = unlimited",
                    "type": "integer"
                },
                "tier": {
                    "type": "string"
                },
                "user_name": {
                    "type": "string"
                },
                "valid_until": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_mentionable.CandidateDTO": {
            "type": "object",
            "properties": {
                "addressable": {
                    "description": "Addressable is false for a person who could not open this card. The row is\nstill sent — the menu shows them greyed with \"share the card first\" — because\ndropping them would make a colleague vanish on a private card. Never omitempty:\na missing false would read as addressable to any client that defaults it.",
                    "type": "boolean"
                },
                "display_name": {
                    "description": "the label shown",
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "kind": {
                    "description": "\"human\" | \"agent\"",
                    "type": "string"
                },
                "name": {
                    "description": "the handle written into the mention",
                    "type": "string"
                },
                "owner": {
                    "$ref": "#/definitions/internal_adapter_web_mentionable.OwnerDTO"
                },
                "recent_in_task": {
                    "type": "boolean"
                },
                "user_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_mentionable.OwnerDTO": {
            "type": "object",
            "properties": {
                "display_name": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_ocr.OCRRequest": {
            "type": "object",
            "required": [
                "image_path"
            ],
            "properties": {
                "image_path": {
                    "type": "string",
                    "example": "/path/to/image.jpg"
                }
            }
        },
        "internal_adapter_web_ocr.OCRResponse": {
            "type": "object",
            "properties": {
                "data": {},
                "error": {
                    "type": "string",
                    "example": ""
                },
                "success": {
                    "type": "boolean",
                    "example": true
                }
            }
        },
        "internal_adapter_web_onboarding.CreateVisitorAccountRequest": {
            "type": "object",
            "properties": {
                "language": {
                    "description": "Language preference for preset data (\"zh\" for Chinese, \"en\" for English)",
                    "type": "string",
                    "example": "en"
                },
                "scenario": {
                    "description": "Could add scenario selection in future",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_onboarding.ErrorResponse": {
            "type": "object",
            "properties": {
                "details": {
                    "type": "string"
                },
                "error": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_onboarding.OnboardingConfigResponse": {
            "type": "object",
            "properties": {
                "landing_page": {
                    "type": "string",
                    "example": "/tasks"
                }
            }
        },
        "internal_adapter_web_onboarding.SeedWelcomeRequest": {
            "type": "object",
            "properties": {
                "language": {
                    "description": "Language preference for the welcome board/task (\"zh\" for Chinese, \"en\" for English)",
                    "type": "string",
                    "example": "en"
                }
            }
        },
        "internal_adapter_web_onboarding.SeedWelcomeResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_onboarding.VisitorAccountResponse": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string",
                    "example": "visitor_12345678@example.com"
                },
                "message": {
                    "type": "string",
                    "example": "Visitor account created with preset data"
                },
                "password": {
                    "type": "string",
                    "example": "VisitorPass1234"
                }
            }
        },
        "internal_adapter_web_permission_test.PermissionCheckResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "permission": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                },
                "user_id": {
                    "type": "string"
                },
                "user_role": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_possession.AcquireDTO": {
            "type": "object",
            "properties": {
                "acquiredAt": {
                    "description": "defaults to now",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_possession.AmortizationDTO": {
            "type": "object",
            "properties": {
                "dailyCost": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "daysHeld": {
                    "type": "integer"
                },
                "monthlyCost": {
                    "description": "MonthlyCost is the same burn rate over 30 days, rounded once from the unrounded\nnet cost. Always present; it is the fallback whenever subCent is true.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                        }
                    ]
                },
                "netCost": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "progress": {
                    "description": "Progress is nil when no expected life is set.",
                    "type": "number"
                },
                "remainingDays": {
                    "description": "RemainingDays is nil when no expected life is set; 0 once the target is met.",
                    "type": "integer"
                },
                "residual": {
                    "description": "Residual is straight-line book value for the trend chart ONLY.\nIt is not market value and must never be presented as net worth.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                        }
                    ]
                },
                "subCent": {
                    "description": "SubCent is true when the real daily cost is non-zero but rounds to 0.00.\nClients MUST show monthlyCost instead of printing 0.00/day. Note dailyCost is\nexactly 0 in this case, so scaling it client-side would just reproduce the lie.",
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_possession.ConvertedTotalsDTO": {
            "type": "object",
            "properties": {
                "belowPrecision": {
                    "description": "BelowPrecision marks a genuinely non-zero total that rounds to 0.00.",
                    "type": "boolean"
                },
                "cost": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                },
                "dailyCost": {
                    "type": "number"
                },
                "missingRates": {
                    "description": "MissingRates non-empty means this roll-up is INCOMPLETE and the UI must say so.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "residual": {
                    "type": "number"
                }
            }
        },
        "internal_adapter_web_possession.CreatePossessionDTO": {
            "type": "object",
            "required": [
                "cost",
                "name"
            ],
            "properties": {
                "acquiredAt": {
                    "type": "string"
                },
                "brand": {
                    "type": "string",
                    "maxLength": 100
                },
                "cost": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "expectedLifeDays": {
                    "type": "integer",
                    "minimum": 0
                },
                "expenseId": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "model": {
                    "type": "string",
                    "maxLength": 255
                },
                "name": {
                    "type": "string",
                    "maxLength": 255
                },
                "path": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "vendor": {
                    "type": "string",
                    "maxLength": 255
                }
            }
        },
        "internal_adapter_web_possession.CurrencyTotalDTO": {
            "type": "object",
            "properties": {
                "currency": {
                    "type": "string"
                },
                "total": {
                    "type": "number"
                }
            }
        },
        "internal_adapter_web_possession.DisposeDTO": {
            "type": "object",
            "required": [
                "status"
            ],
            "properties": {
                "disposedAt": {
                    "description": "defaults to now",
                    "type": "string"
                },
                "incomeAccountId": {
                    "description": "IncomeAccountID optionally records which account received the money.",
                    "type": "string"
                },
                "incomeTitle": {
                    "description": "IncomeTitle overrides the generated \"Sold: \u003cname\u003e\" title.",
                    "type": "string",
                    "maxLength": 255
                },
                "note": {
                    "type": "string",
                    "maxLength": 1000
                },
                "proceeds": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "recordIncome": {
                    "description": "RecordIncome also books the proceeds as an Income. Ignored unless status is\n\"sold\" with proceeds — giving something away or scrapping it earns nothing.",
                    "type": "boolean"
                },
                "status": {
                    "type": "string",
                    "enum": [
                        "retired",
                        "sold",
                        "lost"
                    ]
                }
            }
        },
        "internal_adapter_web_possession.DisposeResponseDTO": {
            "type": "object",
            "properties": {
                "incomeId": {
                    "description": "IncomeID is empty when no income was requested or the disposal earned nothing.",
                    "type": "string"
                },
                "possession": {
                    "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                }
            }
        },
        "internal_adapter_web_possession.MoneyDTO": {
            "type": "object",
            "properties": {
                "amount": {
                    "type": "number"
                },
                "currency": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_possession.PossessionListResponseDTO": {
            "type": "object",
            "properties": {
                "possessions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_possession.PossessionResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_possession.PossessionResponseDTO": {
            "type": "object",
            "properties": {
                "acquiredAt": {
                    "type": "string"
                },
                "amortization": {
                    "$ref": "#/definitions/internal_adapter_web_possession.AmortizationDTO"
                },
                "brand": {
                    "type": "string"
                },
                "cost": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "disposalNote": {
                    "type": "string"
                },
                "disposedAt": {
                    "type": "string"
                },
                "expectedLifeDays": {
                    "type": "integer"
                },
                "expenseId": {
                    "type": "string"
                },
                "groupId": {
                    "type": "string"
                },
                "groupPermission": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "incomeId": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "model": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "ownerId": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "proceeds": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "resourceId": {
                    "type": "string"
                },
                "resourceUrl": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                },
                "vendor": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_possession.ShareToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\", \"rw\", or \"\" for none",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_possession.SummaryResponseDTO": {
            "type": "object",
            "properties": {
                "conversionUnavailable": {
                    "description": "ConversionUnavailable explains why converted is absent when one was requested:\n\"no_rates_configured\" or \"target_currency_unrated\".",
                    "type": "string"
                },
                "converted": {
                    "$ref": "#/definitions/internal_adapter_web_possession.ConvertedTotalsDTO"
                },
                "costTotals": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_possession.CurrencyTotalDTO"
                    }
                },
                "dailyCostTotals": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_possession.CurrencyTotalDTO"
                    }
                },
                "inServiceCount": {
                    "type": "integer"
                },
                "lostCount": {
                    "type": "integer"
                },
                "residualTotals": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_possession.CurrencyTotalDTO"
                    }
                },
                "retiredCount": {
                    "type": "integer"
                },
                "soldCount": {
                    "type": "integer"
                },
                "subCentItems": {
                    "type": "integer"
                },
                "totalCount": {
                    "type": "integer"
                },
                "wishCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_possession.UpdatePossessionDTO": {
            "type": "object",
            "properties": {
                "brand": {
                    "type": "string",
                    "maxLength": 100
                },
                "cost": {
                    "$ref": "#/definitions/internal_adapter_web_possession.MoneyDTO"
                },
                "expectedLifeDays": {
                    "type": "integer",
                    "minimum": 0
                },
                "expenseId": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "model": {
                    "type": "string",
                    "maxLength": 255
                },
                "name": {
                    "type": "string",
                    "maxLength": 255
                },
                "path": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "vendor": {
                    "type": "string",
                    "maxLength": 255
                }
            }
        },
        "internal_adapter_web_preference.PatchPreferenceRequest": {
            "type": "object",
            "required": [
                "key",
                "value"
            ],
            "properties": {
                "key": {
                    "type": "string"
                },
                "value": {}
            }
        },
        "internal_adapter_web_preference.PreferenceResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "settings": {
                    "type": "object",
                    "additionalProperties": true
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_preference.UpsertPreferenceRequest": {
            "type": "object",
            "required": [
                "settings"
            ],
            "properties": {
                "settings": {
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "internal_adapter_web_preference.UpsertPreferenceResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "settings": {
                    "type": "object",
                    "additionalProperties": true
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_project.CreateProjectRequest": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "cwd": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "git_remote_url": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_project.ProjectListResponse": {
            "type": "object",
            "properties": {
                "projects": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_project.ProjectResponse"
                    }
                }
            }
        },
        "internal_adapter_web_project.ProjectResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "cwd": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "git_remote_url": {
                    "type": "string"
                },
                "group_id": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_project.ProjectTaskItem": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_project.ProjectTasksResponse": {
            "type": "object",
            "properties": {
                "tasks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_project.ProjectTaskItem"
                    }
                }
            }
        },
        "internal_adapter_web_project.UpdateProjectRequest": {
            "type": "object",
            "properties": {
                "cwd": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "git_remote_url": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_prompt.CreatePromptRequest": {
            "type": "object",
            "required": [
                "label",
                "template"
            ],
            "properties": {
                "icon": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "template": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_prompt.PromptListResponse": {
            "type": "object",
            "properties": {
                "prompts": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_prompt.PromptResponse"
                    }
                }
            }
        },
        "internal_adapter_web_prompt.PromptResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "group_id": {
                    "type": "string"
                },
                "icon": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_builtin": {
                    "type": "boolean"
                },
                "label": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "owner_id": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "template": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_prompt.UpdatePromptRequest": {
            "type": "object",
            "properties": {
                "icon": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "template": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_queue.CreateQueueTaskDTO": {
            "type": "object",
            "required": [
                "payload",
                "taskType"
            ],
            "properties": {
                "payload": {
                    "type": "object",
                    "additionalProperties": true
                },
                "taskType": {
                    "type": "string",
                    "example": "email_send"
                }
            }
        },
        "internal_adapter_web_queue.MultipleTasksResponseDTO": {
            "type": "object",
            "required": [
                "message",
                "tasks"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "Tasks retrieved successfully"
                },
                "tasks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_queue.QueueTaskResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_queue.QueueTaskResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "payload",
                "retry_count",
                "status",
                "task_type",
                "updated_at"
            ],
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "owner_id": {
                    "type": "string",
                    "example": "user-456"
                },
                "owner_name": {
                    "type": "string",
                    "example": "john@example.com"
                },
                "payload": {
                    "type": "object",
                    "additionalProperties": true
                },
                "result": {
                    "type": "object",
                    "additionalProperties": true
                },
                "retry_count": {
                    "type": "integer",
                    "example": 0
                },
                "status": {
                    "type": "string",
                    "enum": [
                        "pending",
                        "processing",
                        "completed",
                        "failed"
                    ],
                    "example": "completed"
                },
                "task_type": {
                    "type": "string",
                    "example": "email_send"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_queue.QueueTasksQueryDTO": {
            "type": "object",
            "properties": {
                "status": {
                    "type": "string",
                    "enum": [
                        "pending",
                        "processing",
                        "completed",
                        "failed"
                    ],
                    "example": "pending"
                },
                "taskType": {
                    "type": "string",
                    "example": "email_send"
                }
            }
        },
        "internal_adapter_web_queue.SingleTaskResponseDTO": {
            "type": "object",
            "required": [
                "message",
                "task"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "Task created successfully"
                },
                "task": {
                    "$ref": "#/definitions/internal_adapter_web_queue.QueueTaskResponseDTO"
                }
            }
        },
        "internal_adapter_web_queue.TaskStatusUpdateResponseDTO": {
            "type": "object",
            "required": [
                "id",
                "message",
                "status"
            ],
            "properties": {
                "id": {
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "message": {
                    "type": "string",
                    "example": "Task status updated successfully"
                },
                "status": {
                    "type": "string",
                    "enum": [
                        "pending",
                        "processing",
                        "completed",
                        "failed"
                    ],
                    "example": "completed"
                }
            }
        },
        "internal_adapter_web_queue.UpdateTaskStatusDTO": {
            "type": "object",
            "required": [
                "status"
            ],
            "properties": {
                "result": {
                    "type": "object",
                    "additionalProperties": true
                },
                "status": {
                    "type": "string",
                    "enum": [
                        "pending",
                        "processing",
                        "completed",
                        "failed"
                    ],
                    "example": "completed"
                }
            }
        },
        "internal_adapter_web_quick_capture.UploadResponseDTO": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "taskId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.BatchMoveRequest": {
            "type": "object",
            "required": [
                "newPathPrefix",
                "oldPathPrefix"
            ],
            "properties": {
                "newPathPrefix": {
                    "type": "string"
                },
                "oldPathPrefix": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.BatchMoveToRequest": {
            "type": "object",
            "required": [
                "ids",
                "path"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "string"
                    }
                },
                "path": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.ContentSwapResultResponse": {
            "type": "object",
            "properties": {
                "hint": {
                    "type": "string"
                },
                "historyBytes": {
                    "type": "integer"
                },
                "historyCount": {
                    "type": "integer"
                },
                "resource": {
                    "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                },
                "retiredFileKey": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.CreateDirRequest": {
            "type": "object",
            "required": [
                "name",
                "path"
            ],
            "properties": {
                "name": {
                    "description": "Directory name",
                    "type": "string"
                },
                "path": {
                    "description": "Parent path",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.CreateResourceRequest": {
            "type": "object",
            "required": [
                "fileKey",
                "fileSize",
                "mimeType",
                "originalName",
                "uploadMethod"
            ],
            "properties": {
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "type": "string"
                },
                "fileKey": {
                    "type": "string"
                },
                "fileSize": {
                    "type": "integer"
                },
                "mimeType": {
                    "type": "string"
                },
                "originalName": {
                    "type": "string"
                },
                "uploadMethod": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.DirEntryResponse": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "Group ID if shared",
                    "type": "string"
                },
                "groupPermission": {
                    "description": "Group permission if shared",
                    "type": "string"
                },
                "id": {
                    "description": "Folder resource ID",
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "resourceCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_resource.EntityLinkResponse": {
            "type": "object",
            "properties": {
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.ListContentVersionsResponse": {
            "type": "object",
            "properties": {
                "resourceId": {
                    "type": "string"
                },
                "totalBytes": {
                    "type": "integer"
                },
                "totalCount": {
                    "type": "integer"
                },
                "versions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/github_com_undercontrol_backend_internal_domain_support_resource.ContentHistoryVersion"
                    }
                }
            }
        },
        "internal_adapter_web_resource.ListDirsResponse": {
            "type": "object",
            "properties": {
                "dirs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_resource.DirEntryResponse"
                    }
                }
            }
        },
        "internal_adapter_web_resource.ListResourcesResponse": {
            "type": "object",
            "properties": {
                "limit": {
                    "type": "integer"
                },
                "page": {
                    "type": "integer"
                },
                "resources": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                    }
                },
                "total": {
                    "type": "integer"
                },
                "totalPages": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_resource.MoveResourceRequest": {
            "type": "object",
            "required": [
                "path"
            ],
            "properties": {
                "path": {
                    "description": "New path for the resource",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.PrepareContentSwapRequest": {
            "type": "object",
            "required": [
                "fileSize"
            ],
            "properties": {
                "fileSize": {
                    "description": "FileSize is the exact byte length of the replacement. Confirm holds the upload to\nthis number — a short object is a failed upload, not a smaller file.",
                    "type": "integer"
                },
                "mimeType": {
                    "description": "MimeType is optional; the file keeps its current type when it is omitted.",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.PrepareContentSwapResponse": {
            "type": "object",
            "properties": {
                "currentFileKey": {
                    "description": "CurrentFileKey is what the file still points at, and will keep pointing at unless\nand until confirm succeeds.",
                    "type": "string"
                },
                "fileKey": {
                    "type": "string"
                },
                "fileSize": {
                    "type": "integer"
                },
                "mimeType": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "uploadUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.PrepareUploadRequest": {
            "type": "object",
            "required": [
                "mimeType",
                "originalName",
                "uploadMethod"
            ],
            "properties": {
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "type": "string"
                },
                "fileSize": {
                    "description": "NOTE: no binding:\"required\" — zero is a valid int64 value; explicit check in handler rejects 0-byte files with a clear error",
                    "type": "integer"
                },
                "metadata": {
                    "description": "Optional metadata to attach to the resource",
                    "type": "object",
                    "additionalProperties": true
                },
                "mimeType": {
                    "type": "string"
                },
                "originalName": {
                    "type": "string"
                },
                "path": {
                    "description": "Virtual folder path (default \"/\")",
                    "type": "string"
                },
                "uploadMethod": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.PrepareUploadResponse": {
            "type": "object",
            "properties": {
                "fileKey": {
                    "type": "string"
                },
                "resource": {
                    "$ref": "#/definitions/internal_adapter_web_resource.ResourceResponse"
                },
                "uploadUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.QuotaInfoResponse": {
            "type": "object",
            "properties": {
                "quota": {
                    "$ref": "#/definitions/internal_adapter_web_resource.QuotaResponse"
                },
                "usage": {
                    "$ref": "#/definitions/internal_adapter_web_resource.UsageResponse"
                }
            }
        },
        "internal_adapter_web_resource.QuotaResponse": {
            "type": "object",
            "properties": {
                "isUnlimited": {
                    "type": "boolean"
                },
                "maxFileSizeBytes": {
                    "type": "integer"
                },
                "maxStorageBytes": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_resource.RenameResourceRequest": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "name": {
                    "description": "New name for the resource",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.ResourceResponse": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "entityLinks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_resource.EntityLinkResponse"
                    }
                },
                "fileKey": {
                    "type": "string"
                },
                "fileSize": {
                    "type": "integer"
                },
                "groupId": {
                    "type": "string"
                },
                "groupPermission": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": true
                },
                "mimeType": {
                    "type": "string"
                },
                "originalName": {
                    "type": "string"
                },
                "ownerId": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "presignedUrl": {
                    "type": "string"
                },
                "processingStatus": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "thumbnailKey": {
                    "type": "string"
                },
                "updatedAt": {
                    "type": "string"
                },
                "uploadMethod": {
                    "type": "string"
                },
                "uploadedAt": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.ResourceStatsResponse": {
            "type": "object",
            "properties": {
                "currentSize": {
                    "type": "integer"
                },
                "currentSizeFormatted": {
                    "type": "string"
                },
                "historyCount": {
                    "type": "integer"
                },
                "historySize": {
                    "type": "integer"
                },
                "historySizeFormatted": {
                    "type": "string"
                },
                "totalCount": {
                    "type": "integer"
                },
                "totalSize": {
                    "type": "integer"
                },
                "totalSizeFormatted": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.ShareFolderToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" for read, \"rw\" for read-write",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.ToMarkdownResponse": {
            "type": "object",
            "properties": {
                "markdown": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.UnlinkEntityRequest": {
            "type": "object",
            "required": [
                "entityId",
                "entityType"
            ],
            "properties": {
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.UpdateResourceContentRequest": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "content": {
                    "description": "Base64 encoded content",
                    "type": "string"
                },
                "mimeType": {
                    "description": "Optional, keeps existing if not provided",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.UpdateResourceEntityRequest": {
            "type": "object",
            "required": [
                "entityId",
                "entityType"
            ],
            "properties": {
                "entityId": {
                    "type": "string"
                },
                "entityType": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_resource.UpdateResourceMetadataRequest": {
            "type": "object",
            "required": [
                "metadata"
            ],
            "properties": {
                "metadata": {
                    "type": "object",
                    "additionalProperties": true
                }
            }
        },
        "internal_adapter_web_resource.UpdateResourceTagsRequest": {
            "type": "object",
            "required": [
                "tags"
            ],
            "properties": {
                "tags": {
                    "description": "New set of tags for the resource",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_resource.UsageResponse": {
            "type": "object",
            "properties": {
                "currentStorageBytes": {
                    "description": "CurrentStorageBytes + HistoryStorageBytes = TotalStorageBytes. The second term is\nold versions of files whose content was replaced: still stored, still charged, and\npresent in no file listing. A quota page that shows only the total shows a number\nits own file list contradicts.",
                    "type": "integer"
                },
                "historyStorageBytes": {
                    "type": "integer"
                },
                "historyVersions": {
                    "type": "integer"
                },
                "totalFiles": {
                    "type": "integer"
                },
                "totalStorageBytes": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_savedquery.CreateSavedQueryRequest": {
            "type": "object",
            "required": [
                "name",
                "query_string"
            ],
            "properties": {
                "name": {
                    "type": "string"
                },
                "query_string": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_savedquery.ReorderRequest": {
            "type": "object",
            "required": [
                "ids"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_savedquery.SavedQueryListResponse": {
            "type": "object",
            "properties": {
                "saved_queries": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_savedquery.SavedQueryResponse"
                    }
                }
            }
        },
        "internal_adapter_web_savedquery.SavedQueryResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "query_string": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_savedquery.UpdateSavedQueryRequest": {
            "type": "object",
            "properties": {
                "is_pinned": {
                    "type": "boolean"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "query_string": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_scheduling.CreateScheduledJobDTO": {
            "type": "object",
            "required": [
                "cronExpression",
                "jobType",
                "name",
                "payload",
                "timezone"
            ],
            "properties": {
                "cronExpression": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "jobType": {
                    "type": "string"
                },
                "maxRuntimeSeconds": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "payload": {
                    "$ref": "#/definitions/internal_adapter_web_scheduling.JobPayloadDTO"
                },
                "timezone": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_scheduling.JobPayloadDTO": {
            "type": "object",
            "properties": {
                "agent": {
                    "description": "wake_agent_session fields (shares `prompt` with ai_task_summary)",
                    "type": "string"
                },
                "dataPath": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "prompt": {
                    "type": "string"
                },
                "query": {
                    "description": "ai_task_summary fields",
                    "type": "string"
                },
                "retentionDays": {
                    "description": "database_backup fields",
                    "type": "integer"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "description": "task_creation fields",
                    "type": "string"
                },
                "titleTemplate": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_scheduling.ScheduledJobResponseDTO": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "cronExpression": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "enabled": {
                    "type": "boolean"
                },
                "id": {
                    "type": "string"
                },
                "jobType": {
                    "type": "string"
                },
                "lastRunAt": {
                    "type": "string"
                },
                "lastRunError": {
                    "type": "string"
                },
                "lastRunStatus": {
                    "type": "string"
                },
                "maxRuntimeSeconds": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "nextRunAt": {
                    "type": "string"
                },
                "nextRunAtHuman": {
                    "description": "Human-readable next run time",
                    "type": "string"
                },
                "payload": {
                    "$ref": "#/definitions/internal_adapter_web_scheduling.JobPayloadDTO"
                },
                "runCount": {
                    "type": "integer"
                },
                "scheduleHuman": {
                    "description": "Human-readable schedule description",
                    "type": "string"
                },
                "timezone": {
                    "type": "string"
                },
                "updatedAt": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_scheduling.ScheduledJobRunResponseDTO": {
            "type": "object",
            "properties": {
                "completedAt": {
                    "type": "string"
                },
                "createdAt": {
                    "type": "string"
                },
                "durationMs": {
                    "type": "integer"
                },
                "error": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "result": {
                    "type": "string"
                },
                "scheduledAt": {
                    "type": "string"
                },
                "scheduledJobId": {
                    "type": "string"
                },
                "startedAt": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_scheduling.ScheduledJobRunsListResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobRunResponseDTO"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_scheduling.ScheduledJobsListResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_scheduling.ScheduledJobResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_scheduling.UpdateScheduledJobDTO": {
            "type": "object",
            "properties": {
                "cronExpression": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "maxRuntimeSeconds": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "payload": {
                    "$ref": "#/definitions/internal_adapter_web_scheduling.JobPayloadDTO"
                },
                "timezone": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_skill.CreateSkillRequest": {
            "type": "object",
            "required": [
                "content",
                "name"
            ],
            "properties": {
                "content": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_skill.SkillListResponse": {
            "type": "object",
            "properties": {
                "skills": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_skill.SkillResponse"
                    }
                }
            }
        },
        "internal_adapter_web_skill.SkillResponse": {
            "type": "object",
            "properties": {
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "editable": {
                    "type": "boolean"
                },
                "file_path": {
                    "type": "string"
                },
                "group_id": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_system": {
                    "type": "boolean"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_skill.UpdateSkillRequest": {
            "type": "object",
            "properties": {
                "content": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_storageclass.CreateStorageClassRequest": {
            "type": "object",
            "required": [
                "config",
                "name",
                "type"
            ],
            "properties": {
                "config": {
                    "description": "JSON string with type-specific config",
                    "type": "string"
                },
                "is_default_backup": {
                    "description": "Defaults to false",
                    "type": "boolean"
                },
                "is_default_primary": {
                    "description": "Defaults to false",
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "localfs",
                        "s3_compatible"
                    ]
                }
            }
        },
        "internal_adapter_web_storageclass.ReorderStorageClassesRequest": {
            "type": "object",
            "required": [
                "ids"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_storageclass.SetGroupStorageClassRequest": {
            "type": "object",
            "properties": {
                "backup_storage_class_id": {
                    "description": "\"\" or nil = no backup (NOT \"leave unchanged\")",
                    "type": "string"
                },
                "primary_storage_class_id": {
                    "description": "\"\" or nil = no primary; if backup is also empty, the whole assignment is cleared",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_storageclass.SetUserStorageClassRequest": {
            "type": "object",
            "properties": {
                "backup_storage_class_id": {
                    "description": "\"\" or nil = no backup (NOT \"leave unchanged\")",
                    "type": "string"
                },
                "primary_storage_class_id": {
                    "description": "\"\" or nil = no primary; if backup is also empty, the whole assignment is cleared",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_storageclass.StorageClassListResponse": {
            "type": "object",
            "properties": {
                "storage_classes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_storageclass.StorageClassResponse"
                    }
                }
            }
        },
        "internal_adapter_web_storageclass.StorageClassResponse": {
            "type": "object",
            "properties": {
                "config": {
                    "description": "Full config (only when explicitly requested)",
                    "type": "string"
                },
                "config_masked": {
                    "description": "Masked config (secrets replaced)",
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_default_backup": {
                    "type": "boolean"
                },
                "is_default_primary": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "order": {
                    "type": "integer"
                },
                "type": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_storageclass.TestStorageClassRequest": {
            "type": "object",
            "required": [
                "config",
                "type"
            ],
            "properties": {
                "config": {
                    "type": "string"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "localfs",
                        "s3_compatible"
                    ]
                }
            }
        },
        "internal_adapter_web_storageclass.TestStorageClassResponse": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_storageclass.UpdateStorageClassRequest": {
            "type": "object",
            "properties": {
                "config": {
                    "type": "string"
                },
                "is_default_backup": {
                    "type": "boolean"
                },
                "is_default_primary": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "localfs",
                        "s3_compatible"
                    ]
                }
            }
        },
        "internal_adapter_web_systemconfig.BatchUpdateConfigItem": {
            "type": "object",
            "required": [
                "key",
                "value"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "key": {
                    "type": "string"
                },
                "value": {
                    "description": "Pointer for the same clear-to-empty reason as UpdateConfigRequest.Value.",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_systemconfig.BatchUpdateConfigsRequest": {
            "type": "object",
            "required": [
                "configs"
            ],
            "properties": {
                "configs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_systemconfig.BatchUpdateConfigItem"
                    }
                }
            }
        },
        "internal_adapter_web_systemconfig.BatchUpdateConfigsResponse": {
            "type": "object",
            "properties": {
                "failed": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "message": {
                    "type": "string"
                },
                "updated": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_systemconfig.CategoryConfigsResponse": {
            "type": "object",
            "properties": {
                "category": {
                    "type": "string"
                },
                "configs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_systemconfig.SystemConfigResponse"
                    }
                }
            }
        },
        "internal_adapter_web_systemconfig.ConfigDefinitionResponse": {
            "type": "object",
            "properties": {
                "category": {
                    "type": "string"
                },
                "class": {
                    "description": "startup, seedable, or runtime",
                    "type": "string"
                },
                "cli_flag": {
                    "description": "CLI flag name (without --)",
                    "type": "string"
                },
                "current_value": {
                    "description": "Current runtime value (masked for secrets)",
                    "type": "string"
                },
                "default_value": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "env_var": {
                    "description": "Environment variable name",
                    "type": "string"
                },
                "is_secret": {
                    "type": "boolean"
                },
                "key": {
                    "type": "string"
                },
                "value_type": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_systemconfig.GetAllConfigsResponse": {
            "type": "object",
            "properties": {
                "categories": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_systemconfig.CategoryConfigsResponse"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_systemconfig.GetDefinitionsResponse": {
            "type": "object",
            "properties": {
                "definitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_systemconfig.ConfigDefinitionResponse"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_systemconfig.MessageResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_systemconfig.RefreshCacheResponse": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_systemconfig.SystemConfigResponse": {
            "type": "object",
            "properties": {
                "category": {
                    "description": "ai, storage, integration, telemetry, scheduler, security, general",
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "is_secret": {
                    "type": "boolean"
                },
                "key": {
                    "type": "string"
                },
                "locked": {
                    "description": "Whether config is locked (managed by env var)",
                    "type": "boolean"
                },
                "source": {
                    "description": "Who set this: startup, admin, default",
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                },
                "value": {
                    "description": "Masked for secrets",
                    "type": "string"
                },
                "value_type": {
                    "description": "string, int, bool, float, json, secret",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_systemconfig.TestCategoryRequest": {
            "type": "object",
            "properties": {
                "keys": {
                    "description": "Optional: specific keys to test within the category",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_systemconfig.TestCategoryResponse": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_systemconfig.UpdateConfigRequest": {
            "type": "object",
            "required": [
                "value"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "value": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_tag.TagListResponse": {
            "type": "object",
            "properties": {
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_tag.TagResponse"
                    }
                }
            }
        },
        "internal_adapter_web_tag.TagResponse": {
            "type": "object",
            "properties": {
                "color": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "last_used_at": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "usage_count": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_task_from_image.CreateTaskFromImageResponseDTO": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "processingStatus": {
                    "type": "string"
                },
                "queueTaskId": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "task": {
                    "$ref": "#/definitions/internal_adapter_web_task_from_image.TaskDTO"
                }
            }
        },
        "internal_adapter_web_task_from_image.ProcessTaskResponseDTO": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "processingMethod": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                },
                "taskId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_task_from_image.TaskDTO": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updatedAt": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_task_status_event.TaskStatusEventResponseDTO": {
            "type": "object",
            "properties": {
                "actor_id": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "previous_status": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                },
                "task_title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.AddLinkedItemsDTO": {
            "type": "object",
            "required": [
                "linkedItemIds"
            ],
            "properties": {
                "linkedItemIds": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.BatchDeleteTodolistItemsDTO": {
            "type": "object",
            "required": [
                "ids"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.BatchGetTodolistItemsDTO": {
            "type": "object",
            "required": [
                "ids"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.BatchTransferOwnershipDTO": {
            "type": "object",
            "required": [
                "ids",
                "newOwnerId"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "string"
                    }
                },
                "newOwnerId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpdateEachDTO": {
            "type": "object",
            "required": [
                "items"
            ],
            "properties": {
                "items": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.UpdateEachItemDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpdateEachResultDTO": {
            "type": "object",
            "properties": {
                "failCount": {
                    "type": "integer"
                },
                "results": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateResultItemDTO"
                    }
                },
                "successCount": {
                    "type": "integer"
                },
                "totalCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpdateResultDTO": {
            "type": "object",
            "properties": {
                "failCount": {
                    "type": "integer"
                },
                "results": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.BatchUpdateResultItemDTO"
                    }
                },
                "successCount": {
                    "type": "integer"
                },
                "totalCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpdateResultItemDTO": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpdateTodolistItemsDTO": {
            "type": "object",
            "required": [
                "ids",
                "updates"
            ],
            "properties": {
                "ids": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "string"
                    }
                },
                "updates": {
                    "$ref": "#/definitions/internal_adapter_web_todolist.UpdateTodolistItemDTO"
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpsertResultDTO": {
            "type": "object",
            "properties": {
                "createdCount": {
                    "type": "integer"
                },
                "failCount": {
                    "type": "integer"
                },
                "results": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.UpsertResultItemDTO"
                    }
                },
                "skippedCount": {
                    "type": "integer"
                },
                "totalCount": {
                    "type": "integer"
                },
                "updatedCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.BatchUpsertTodolistItemsDTO": {
            "type": "object",
            "required": [
                "items"
            ],
            "properties": {
                "items": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.UpsertTodolistItemDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.CheckInResponseDTO": {
            "type": "object",
            "required": [
                "checkInCount"
            ],
            "properties": {
                "checkInCount": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.CloseSprintDTO": {
            "type": "object",
            "properties": {
                "rollover": {
                    "description": "\"backlog\" (default) or an open sprint task id",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CommentResponseDTO": {
            "type": "object",
            "properties": {
                "anchor_target": {
                    "type": "string"
                },
                "anchor_target_id": {
                    "type": "string"
                },
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "parent_id": {
                    "type": "string"
                },
                "quoted_text": {
                    "type": "string"
                },
                "replies": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                    }
                },
                "running_as": {
                    "description": "RunningAs is the execution badge: present only when someone else's agent\nwrote this comment on the reader-visible thread. Absent — the whole\nobject, not a false flag inside it — when a person wrote it or when an\nagent wrote it for its own maintainer. Card 31881489 AC-2 is that absence,\nwhich is why it is decided server-side and not by a frontend condition.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentRunAsDTO"
                        }
                    ]
                },
                "status": {
                    "type": "string"
                },
                "todolist_item_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CommentRunAsDTO": {
            "type": "object",
            "properties": {
                "agent_name": {
                    "description": "AgentName is the agent whose voice this is.",
                    "type": "string"
                },
                "authority_name": {
                    "type": "string"
                },
                "authority_user_id": {
                    "description": "Authority is who summoned it — whose permissions it holds. Not the\nmaintainer; the card calls this the visual check on the permission model.",
                    "type": "string"
                },
                "maintainer_id": {
                    "description": "Maintainer owns the agent — whose prompt is running.",
                    "type": "string"
                },
                "maintainer_name": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CommentSubscriptionDTO": {
            "type": "object",
            "required": [
                "action"
            ],
            "properties": {
                "action": {
                    "type": "string",
                    "enum": [
                        "subscribe",
                        "unsubscribe"
                    ]
                },
                "member_id": {
                    "description": "MemberID is whose subscription to change; empty = the caller. Changing\nsomeone else's requires task write access.",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CommentSubscriptionResultDTO": {
            "type": "object",
            "properties": {
                "affected_sessions": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.CreateCommentDTO": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "anchor_prefix": {
                    "type": "string"
                },
                "anchor_suffix": {
                    "type": "string"
                },
                "anchor_target": {
                    "type": "string"
                },
                "anchor_target_id": {
                    "type": "string"
                },
                "content": {
                    "type": "string"
                },
                "quoted_text": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CreateCustomFieldDefinitionDTO": {
            "type": "object",
            "required": [
                "display_name",
                "field_type"
            ],
            "properties": {
                "array_element_enum_source": {
                    "$ref": "#/definitions/internal_adapter_web_todolist.EnumSourceDTO"
                },
                "array_element_type": {
                    "description": "For array type",
                    "type": "string"
                },
                "default_value": {},
                "display_name": {
                    "type": "string"
                },
                "enum_source": {
                    "description": "For enum type",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.EnumSourceDTO"
                        }
                    ]
                },
                "field_type": {
                    "type": "string",
                    "enum": [
                        "string",
                        "number",
                        "datetime",
                        "boolean",
                        "enum",
                        "array"
                    ]
                },
                "name": {
                    "description": "Optional - auto-generated if not provided",
                    "type": "string"
                },
                "order": {
                    "type": "integer"
                },
                "required": {
                    "type": "boolean"
                },
                "tag_selector": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.CreateFromExistingDTO": {
            "type": "object",
            "required": [
                "title"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "inheritSharing": {
                    "description": "If true, copy group sharing settings from original item",
                    "type": "boolean"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CreateNoteDTO": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "content": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CreateReplyDTO": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "content": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CreateShareLinkDTO": {
            "type": "object",
            "properties": {
                "allowAttachments": {
                    "type": "boolean"
                },
                "allowUpload": {
                    "type": "boolean"
                },
                "expiresAt": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CreateTodolistItemDTO": {
            "type": "object",
            "required": [
                "title"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "deadline": {
                    "description": "Flexible: RFC3339 or date-only (matches the update channel)",
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "kickoff": {
                    "description": "Flexible: RFC3339 or date-only (matches the update channel)",
                    "type": "string"
                },
                "metadata": {
                    "description": "Metadata lets a client set extensible keys in the SAME request that\ncreates the task. Without it, anything metadata-shaped costs a second\nround trip per task — which a vault push of several thousand notes pays\nseveral thousand times (task 9290af25). Update already accepted it; the\nasymmetry was an omission, not a rule.",
                    "type": "object",
                    "additionalProperties": {}
                },
                "path": {
                    "type": "string"
                },
                "resourceIds": {
                    "description": "Resources to link after task creation (e.g., images uploaded during creation)",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.CustomFieldDefinitionResponseDTO": {
            "type": "object",
            "properties": {
                "array_element_enum_source": {
                    "$ref": "#/definitions/internal_adapter_web_todolist.EnumSourceDTO"
                },
                "array_element_type": {
                    "description": "For array type",
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "default_value": {},
                "display_name": {
                    "type": "string"
                },
                "enum_source": {
                    "description": "For enum type",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.EnumSourceDTO"
                        }
                    ]
                },
                "field_type": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "order": {
                    "type": "integer"
                },
                "required": {
                    "type": "boolean"
                },
                "tag_selector": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.DailyActivityDTO": {
            "type": "object",
            "required": [
                "count",
                "date"
            ],
            "properties": {
                "count": {
                    "description": "Number of tasks with activity on this date",
                    "type": "integer"
                },
                "date": {
                    "description": "ISO date format: YYYY-MM-DD",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.DailyActivityResponseDTO": {
            "type": "object",
            "required": [
                "activity"
            ],
            "properties": {
                "activity": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.DailyActivityDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.DescriptionHistoryListResponseDTO": {
            "type": "object",
            "required": [
                "history"
            ],
            "properties": {
                "history": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.DescriptionHistoryResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.DescriptionHistoryResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "created_by",
                "description",
                "id"
            ],
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.EnumSourceDTO": {
            "type": "object",
            "required": [
                "type"
            ],
            "properties": {
                "tag_filter": {
                    "description": "taskIds only: restrict options to tasks with ALL these tags",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "static",
                        "users",
                        "tags",
                        "statuses",
                        "taskIds"
                    ]
                },
                "values": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.ExplorerItemDTO": {
            "type": "object",
            "properties": {
                "deadline": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.ExplorerResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.ExplorerItemDTO"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.HierarchyItemDTO": {
            "type": "object",
            "properties": {
                "derivedFromId": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.HierarchyItemsResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.HierarchyItemDTO"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.HierarchyNodeDTO": {
            "type": "object",
            "required": [
                "children",
                "item"
            ],
            "properties": {
                "children": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.HierarchyNodeDTO"
                    }
                },
                "item": {
                    "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                }
            }
        },
        "internal_adapter_web_todolist.HierarchyResponseDTO": {
            "type": "object",
            "required": [
                "linkedItems",
                "rootNode"
            ],
            "properties": {
                "linkedItems": {
                    "description": "Items linked to the current item",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                    }
                },
                "rootHasHiddenParent": {
                    "description": "RootHasHiddenParent is true when rootNode is not the true root: a parent exists above\nit that the requester cannot see. Carries no data about that parent — only that one\nexists — so the client can show \"there is more above you cannot see\" without leaking\nits shape (card c13c0c22, criterion 3).",
                    "type": "boolean"
                },
                "rootNode": {
                    "$ref": "#/definitions/internal_adapter_web_todolist.HierarchyNodeDTO"
                }
            }
        },
        "internal_adapter_web_todolist.LinkProjectDTO": {
            "type": "object",
            "required": [
                "project_ids"
            ],
            "properties": {
                "project_ids": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.LinkedItemInfoDTO": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "status",
                "title",
                "updated_at"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "kickoff": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.MoveTaskDTO": {
            "type": "object",
            "required": [
                "path"
            ],
            "properties": {
                "path": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.NLQueryTodolistItemsDTO": {
            "type": "object",
            "required": [
                "query"
            ],
            "properties": {
                "page": {
                    "description": "Page number (1-indexed)",
                    "type": "integer"
                },
                "pageSize": {
                    "description": "Items per page",
                    "type": "integer"
                },
                "query": {
                    "description": "Natural language query",
                    "type": "string"
                },
                "sort": {
                    "description": "Optional sort override",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.SortDTO"
                        }
                    ]
                }
            }
        },
        "internal_adapter_web_todolist.NLQueryTodolistItemsResponseDTO": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                    }
                },
                "generatedQuery": {
                    "description": "AI-generated SQL-like query",
                    "type": "string"
                },
                "page": {
                    "type": "integer"
                },
                "pageSize": {
                    "type": "integer"
                },
                "parseError": {
                    "description": "If query parsing failed",
                    "type": "string"
                },
                "total": {
                    "type": "integer"
                },
                "totalPages": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.NoteHistoryListResponseDTO": {
            "type": "object",
            "required": [
                "history"
            ],
            "properties": {
                "history": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.NoteHistoryResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.NoteHistoryResponseDTO": {
            "type": "object",
            "required": [
                "content",
                "created_at",
                "created_by",
                "id"
            ],
            "properties": {
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.NoteResponseDTO": {
            "type": "object",
            "required": [
                "content",
                "created_at",
                "created_by",
                "id",
                "updated_at",
                "updated_by"
            ],
            "properties": {
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.PaginatedTodolistItemsResponseDTO": {
            "type": "object",
            "required": [
                "items"
            ],
            "properties": {
                "hasMore": {
                    "type": "boolean"
                },
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                    }
                },
                "nextCursor": {
                    "description": "Empty string if no more pages",
                    "type": "string"
                },
                "total": {
                    "description": "Total count",
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.PatchMetadataDTO": {
            "type": "object",
            "required": [
                "key"
            ],
            "properties": {
                "key": {
                    "description": "Metadata key (e.g., \"order\", \"priority\", \"color\")",
                    "type": "string"
                },
                "value": {
                    "description": "Any JSON value (string, number, boolean, object, array, null)"
                }
            }
        },
        "internal_adapter_web_todolist.QueryTodolistItemsDTO": {
            "type": "object",
            "properties": {
                "page": {
                    "description": "Page number (1-indexed)",
                    "type": "integer"
                },
                "pageSize": {
                    "description": "Items per page",
                    "type": "integer"
                },
                "query": {
                    "description": "SQL-like query string",
                    "type": "string"
                },
                "sort": {
                    "description": "Sort configuration",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.SortDTO"
                        }
                    ]
                }
            }
        },
        "internal_adapter_web_todolist.QueryTodolistItemsResponseDTO": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                    }
                },
                "page": {
                    "type": "integer"
                },
                "pageSize": {
                    "type": "integer"
                },
                "total": {
                    "type": "integer"
                },
                "totalPages": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.RecentCommentDTO": {
            "type": "object",
            "properties": {
                "anchor_target": {
                    "type": "string"
                },
                "anchor_target_id": {
                    "type": "string"
                },
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "parent_id": {
                    "type": "string"
                },
                "quoted_text": {
                    "type": "string"
                },
                "replies": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.CommentResponseDTO"
                    }
                },
                "running_as": {
                    "description": "RunningAs is the execution badge: present only when someone else's agent\nwrote this comment on the reader-visible thread. Absent — the whole\nobject, not a false flag inside it — when a person wrote it or when an\nagent wrote it for its own maintainer. Card 31881489 AC-2 is that absence,\nwhich is why it is decided server-side and not by a frontend condition.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.CommentRunAsDTO"
                        }
                    ]
                },
                "status": {
                    "type": "string"
                },
                "task_status": {
                    "type": "string"
                },
                "task_tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "task_title": {
                    "type": "string"
                },
                "todolist_item_id": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.RecentCommentsResponseDTO": {
            "type": "object",
            "properties": {
                "comments": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.RecentCommentDTO"
                    }
                },
                "page": {
                    "type": "integer"
                },
                "pageSize": {
                    "type": "integer"
                },
                "total": {
                    "type": "integer"
                },
                "totalPages": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.ResolveCommentDTO": {
            "type": "object",
            "required": [
                "status"
            ],
            "properties": {
                "status": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.ShareDropResponseDTO": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "fileSize": {
                    "type": "integer"
                },
                "id": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.ShareDropsResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.ShareDropResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.ShareLinkResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "id",
                "isActive",
                "token"
            ],
            "properties": {
                "allowAttachments": {
                    "type": "boolean"
                },
                "allowUpload": {
                    "type": "boolean"
                },
                "code": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "expiresAt": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "isActive": {
                    "type": "boolean"
                },
                "token": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.ShareLinksResponseDTO": {
            "type": "object",
            "required": [
                "shareLinks"
            ],
            "properties": {
                "shareLinks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.ShareLinkResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.ShareToGroupDTO": {
            "type": "object",
            "properties": {
                "groupId": {
                    "description": "nil to remove group sharing",
                    "type": "string"
                },
                "permission": {
                    "description": "\"r\" for read, \"rw\" for read-write, \"\" for none",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.SortDTO": {
            "type": "object",
            "properties": {
                "column": {
                    "description": "Sort column name",
                    "type": "string"
                },
                "direction": {
                    "description": "asc or desc",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.SyncedPathDTO": {
            "type": "object",
            "properties": {
                "id": {
                    "description": "Task ID",
                    "type": "string"
                },
                "obsidianPath": {
                    "description": "The obsidianPath from metadata",
                    "type": "string"
                },
                "updatedAt": {
                    "description": "Task's last updated time (ISO8601)",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.SyncedPathsResponseDTO": {
            "type": "object",
            "properties": {
                "paths": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.SyncedPathDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.TaskBoardResponseDTO": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "metadata": {
                    "type": "object",
                    "additionalProperties": {}
                },
                "name": {
                    "type": "string"
                },
                "project_id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.ThreadSubscriberDTO": {
            "type": "object",
            "properties": {
                "session_status": {
                    "type": "string"
                },
                "subscription": {
                    "description": "\"subscribed\" | \"muted\" | \"none\"",
                    "type": "string"
                },
                "type": {
                    "description": "\"human\" | \"agent\"",
                    "type": "string"
                },
                "user_id": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.TodolistGraphItemDTO": {
            "type": "object",
            "properties": {
                "derivedFromId": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "linkedToIds": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "path": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.TodolistGraphResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TodolistGraphItemDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.TodolistItemResponseDTO": {
            "type": "object",
            "required": [
                "created_at",
                "created_by",
                "id",
                "status",
                "title",
                "updated_at",
                "updated_by"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "checkInCount": {
                    "type": "integer"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "deleted_at": {
                    "description": "Soft delete timestamp",
                    "type": "string"
                },
                "deleted_by": {
                    "description": "User who deleted the item",
                    "type": "string"
                },
                "derivedFrom": {
                    "description": "Enriched object (only populated in detail views)",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.LinkedItemInfoDTO"
                        }
                    ]
                },
                "derivedFromId": {
                    "description": "Raw ID for building relationships",
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "groupId": {
                    "description": "Group this task is shared with",
                    "type": "string"
                },
                "groupPermission": {
                    "description": "\"r\" for read, \"rw\" for read-write",
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "kickoff": {
                    "type": "string"
                },
                "lastCheckedInAt": {
                    "type": "string"
                },
                "linkedTo": {
                    "description": "Enriched objects (only populated in detail views)",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.LinkedItemInfoDTO"
                    }
                },
                "linkedToIds": {
                    "description": "Raw IDs for building relationships",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "metadata": {
                    "description": "Extensible metadata (order, priority, etc.)",
                    "type": "object",
                    "additionalProperties": {}
                },
                "notes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.NoteResponseDTO"
                    }
                },
                "path": {
                    "type": "string"
                },
                "shareLinks": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.ShareLinkResponseDTO"
                    }
                },
                "status": {
                    "type": "string"
                },
                "subtasks": {
                    "description": "Enriched subtask objects (tasks derived from this one)",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.LinkedItemInfoDTO"
                    }
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "updated_by": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.TodolistItemsResponseDTO": {
            "type": "object",
            "required": [
                "items"
            ],
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TodolistItemResponseDTO"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.TransferOwnershipDTO": {
            "type": "object",
            "required": [
                "newOwnerId"
            ],
            "properties": {
                "newOwnerId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.TreeItemDTO": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.TreeItemsResponseDTO": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist.TreeItemDTO"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "internal_adapter_web_todolist.UpdateCommentDTO": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "content": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.UpdateCustomFieldDefinitionDTO": {
            "type": "object",
            "properties": {
                "array_element_enum_source": {
                    "$ref": "#/definitions/internal_adapter_web_todolist.EnumSourceDTO"
                },
                "array_element_type": {
                    "description": "For array type",
                    "type": "string"
                },
                "default_value": {},
                "display_name": {
                    "type": "string"
                },
                "enum_source": {
                    "description": "For enum type",
                    "allOf": [
                        {
                            "$ref": "#/definitions/internal_adapter_web_todolist.EnumSourceDTO"
                        }
                    ]
                },
                "field_type": {
                    "type": "string",
                    "enum": [
                        "string",
                        "number",
                        "datetime",
                        "boolean",
                        "enum",
                        "array"
                    ]
                },
                "name": {
                    "type": "string"
                },
                "order": {
                    "type": "integer"
                },
                "required": {
                    "type": "boolean"
                },
                "tag_selector": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.UpdateEachItemDTO": {
            "type": "object",
            "required": [
                "id"
            ],
            "properties": {
                "description": {
                    "description": "For wikilink resolution - update description only",
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "links_to": {
                    "description": "Task IDs this task links to (from resolved wikilinks)",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "internal_adapter_web_todolist.UpdateNoteDTO": {
            "type": "object",
            "required": [
                "content"
            ],
            "properties": {
                "content": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.UpdateTodolistItemDTO": {
            "type": "object",
            "properties": {
                "assignee": {
                    "description": "Use *string to distinguish between \"not provided\" (nil) and \"clear\" (empty string)",
                    "type": "string"
                },
                "deadline": {
                    "description": "Use *string to distinguish between \"not provided\" (nil) and \"clear\" (empty string)",
                    "type": "string"
                },
                "derivedFromId": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "kickoff": {
                    "description": "Use *string to distinguish between \"not provided\" (nil) and \"clear\" (empty string)",
                    "type": "string"
                },
                "metadata": {
                    "description": "Extensible metadata (order, priority, etc.)",
                    "type": "object",
                    "additionalProperties": {}
                },
                "path": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.UpsertResultItemDTO": {
            "type": "object",
            "properties": {
                "action": {
                    "description": "\"created\", \"updated\", or \"skipped\"",
                    "type": "string"
                },
                "error": {
                    "description": "Error message if failed",
                    "type": "string"
                },
                "id": {
                    "description": "Task ID (created or existing)",
                    "type": "string"
                },
                "obsidianPath": {
                    "description": "The obsidianPath from metadata",
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.UpsertTodolistItemDTO": {
            "type": "object",
            "required": [
                "title"
            ],
            "properties": {
                "assignee": {
                    "type": "string"
                },
                "deadline": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "kickoff": {
                    "type": "string"
                },
                "metadata": {
                    "description": "Must contain \"obsidianPath\" for idempotent upsert",
                    "type": "object",
                    "additionalProperties": {}
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist.UserCandidateResponseDTO": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string"
                },
                "user_id": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_from_audio.CreateFromAudioResponseDTO": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "transcript": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_from_text.CreateFromTextDTO": {
            "type": "object",
            "required": [
                "text"
            ],
            "properties": {
                "text": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_from_text.CreateFromTextResponseDTO": {
            "type": "object",
            "required": [
                "id",
                "status",
                "title"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_from_vision.ProcessTaskResponseDTO": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "processingMethod": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                },
                "todolistItemId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_from_vision.UploadImageResponseDTO": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "taskId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.ConfirmDropResponseDTO": {
            "type": "object",
            "properties": {
                "confirmed": {
                    "type": "boolean"
                }
            }
        },
        "internal_adapter_web_todolist_share.LinkedItemDTO": {
            "type": "object",
            "properties": {
                "name": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.PrepareDropRequestDTO": {
            "type": "object",
            "required": [
                "fileSize",
                "originalName"
            ],
            "properties": {
                "fileSize": {
                    "type": "integer"
                },
                "message": {
                    "description": "Message is an optional one-liner that rides with the file. Plain text, shown\nonly to the owner — never rendered as markdown, never echoed to other visitors.",
                    "type": "string"
                },
                "mimeType": {
                    "type": "string"
                },
                "originalName": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.PrepareDropResponseDTO": {
            "type": "object",
            "properties": {
                "resourceId": {
                    "type": "string"
                },
                "uploadUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.ResolveCodeResponseDTO": {
            "type": "object",
            "properties": {
                "token": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.SharedAttachmentDTO": {
            "type": "object",
            "properties": {
                "filename": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.SharedNoteDTO": {
            "type": "object",
            "properties": {
                "content": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.SharedResourceResponseDTO": {
            "type": "object",
            "properties": {
                "presignedUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_share.SharedTodolistResponseDTO": {
            "type": "object",
            "properties": {
                "allowAttachments": {
                    "type": "boolean"
                },
                "allowUpload": {
                    "description": "AllowUpload is absent on older backends, where it decodes to undefined and\ntherefore falsy on the client — the safe direction. Clients must test it as\n`=== true`, never `!== false`.",
                    "type": "boolean"
                },
                "attachments": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist_share.SharedAttachmentDTO"
                    }
                },
                "description": {
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "linkedTo": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist_share.LinkedItemDTO"
                    }
                },
                "notes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/internal_adapter_web_todolist_share.SharedNoteDTO"
                    }
                },
                "status": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_vision_upload.GetStatusResponseDTO": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "todolistId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_vision_upload.PrepareUploadRequestDTO": {
            "type": "object",
            "required": [
                "fileSize",
                "filename",
                "mimeType"
            ],
            "properties": {
                "fileSize": {
                    "type": "integer"
                },
                "filename": {
                    "type": "string"
                },
                "mimeType": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_vision_upload.PrepareUploadResponseDTO": {
            "type": "object",
            "properties": {
                "expiresIn": {
                    "description": "Seconds until URL expires",
                    "type": "integer"
                },
                "fileKey": {
                    "type": "string"
                },
                "resourceId": {
                    "type": "string"
                },
                "uploadUrl": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_vision_upload.UploadCompleteRequestDTO": {
            "type": "object",
            "required": [
                "resourceId"
            ],
            "properties": {
                "resourceId": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_todolist_vision_upload.UploadCompleteResponseDTO": {
            "type": "object",
            "properties": {
                "message": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                }
            }
        },
        "internal_adapter_web_workspace_event.WorkspaceEventResponseDTO": {
            "type": "object",
            "properties": {
                "actor_id": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "previous_status": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "task_id": {
                    "type": "string"
                },
                "task_title": {
                    "type": "string"
                }
            }
        }
    },
    "securityDefinitions": {
        "BearerAuth": {
            "description": "Type \"Bearer\" followed by a space and JWT token.",
            "type": "apiKey",
            "name": "Authorization",
            "in": "header"
        }
    }
}