From 14ff7c859f79b193a54e20953bb6b6a0079731cc Mon Sep 17 00:00:00 2001 From: Lantum-Brendan Date: Thu, 25 Jun 2026 10:38:42 +0100 Subject: [PATCH 1/8] docs: Add documentation for flatrun-agent Add docs.json manifest and 5 markdown files covering overview, installation, configuration, API reference, and security. --- docs.json | 18 ++++++++++ docs/api-reference.md | 43 +++++++++++++++++++++++ docs/configuration.md | 57 ++++++++++++++++++++++++++++++ docs/installation.md | 81 +++++++++++++++++++++++++++++++++++++++++++ docs/overview.md | 19 ++++++++++ docs/security.md | 23 ++++++++++++ 6 files changed, 241 insertions(+) create mode 100644 docs.json create mode 100644 docs/api-reference.md create mode 100644 docs/configuration.md create mode 100644 docs/installation.md create mode 100644 docs/overview.md create mode 100644 docs/security.md diff --git a/docs.json b/docs.json new file mode 100644 index 0000000..229d507 --- /dev/null +++ b/docs.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://raw.githubusercontent.com/whilesmart/docs-kit/main/schema/docs.schema.json", + "name": "FlatRun Agent", + "description": "Lightweight Go backend for flat-file Docker Compose orchestration with a REST API, container lifecycle management, and plugin architecture", + "icon": "server", + "category": { + "language": "go", + "framework": "app" + }, + "sidebar": [ + { "title": "Overview", "path": "docs/overview.md" }, + { "title": "Installation", "path": "docs/installation.md" }, + { "title": "Configuration", "path": "docs/configuration.md" }, + { "title": "API Reference", "path": "docs/api-reference.md" }, + { "title": "Plugin Architecture", "path": "docs/PLUGIN_ARCHITECTURE.md" }, + { "title": "Security", "path": "docs/security.md" } + ] +} diff --git a/docs/api-reference.md b/docs/api-reference.md new file mode 100644 index 0000000..0359448 --- /dev/null +++ b/docs/api-reference.md @@ -0,0 +1,43 @@ +## API Reference + +### Authentication + +| Method | Endpoint | Description | +|---|---|---| +| POST | `/api/auth/login` | Login with API key | +| GET | `/api/auth/validate` | Validate JWT token | +| GET | `/api/auth/status` | Check auth status | + +### Deployments + +| Method | Endpoint | Description | +|---|---|---| +| GET | `/api/deployments` | List all deployments | +| POST | `/api/deployments` | Create new deployment | +| GET | `/api/deployments/:name` | Get deployment details | +| DELETE | `/api/deployments/:name` | Delete deployment | +| POST | `/api/deployments/:name/start` | Start deployment | +| POST | `/api/deployments/:name/stop` | Stop deployment | +| POST | `/api/deployments/:name/restart` | Restart deployment | +| GET | `/api/deployments/:name/logs` | Get deployment logs | + +### Docker Resources + +| Method | Endpoint | Description | +|---|---|---| +| GET | `/api/containers` | List containers | +| GET | `/api/images` | List images | +| GET | `/api/volumes` | List volumes | +| GET | `/api/networks` | List networks | +| POST | `/api/networks` | Create network | +| DELETE | `/api/networks/:name` | Delete network | + +### Other + +| Method | Endpoint | Description | +|---|---|---| +| GET | `/api/health` | Health check | +| GET | `/api/stats` | System statistics | +| GET | `/api/certificates` | List SSL certificates | +| GET | `/api/templates` | List Quick App templates | +| GET | `/api/plugins` | List installed plugins | diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..26805ea --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,57 @@ +## Configuration + +Copy the example configuration and edit it: + +```bash +cp config.example.yml config.yml +``` + +### Reference + +```yaml +deployments_path: /home/user/deployments +docker_socket: unix:///var/run/docker.sock + +api: + host: 0.0.0.0 + port: 8090 + enable_cors: true + allowed_origins: + - http://localhost:5173 + - http://localhost:3000 + +auth: + enabled: true + api_keys: + - "your-secure-api-key-here" + jwt_secret: "generate-a-secure-random-string-here" + +nginx: + container_name: nginx + config_path: /deployments/nginx/conf.d + reload_command: nginx -s reload + +certbot: + container_name: certbot + email: your-email@example.com + staging: true + +logging: + level: info + format: json + +health: + check_interval: 30s + metrics_retention: 24h +``` + +### Key Options + +| Option | Description | +|---|---| +| `deployments_path` | Directory containing docker-compose deployments | +| `api.port` | API server port (default: 8090) | +| `auth.api_keys` | Valid API keys for authentication | +| `auth.jwt_secret` | Secret for signing JWT tokens | +| `logging.level` | Log level: debug, info, warn, error | +| `health.check_interval` | Health check frequency | diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..f84e353 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,81 @@ +## Installation + +### Prerequisites + +- Go 1.21 or later (for building from source) +- Docker and Docker Compose v2 +- Access to Docker socket (`/var/run/docker.sock`) +- Linux server (Ubuntu 20.04+, Debian 11+, or similar) + +### Option 1: Build from Source + +```bash +git clone https://github.com/flatrun/agent.git +cd agent +make build +``` + +Or manually: + +```bash +go mod download +go build -o flatrun-agent ./cmd/agent +``` + +### Option 2: Download Binary + +```bash +wget https://github.com/flatrun/agent/releases/latest/download/flatrun-agent +chmod +x flatrun-agent +``` + +### Running + +Development mode: + +```bash +make run +# or +./flatrun-agent --config config.yml +``` + +### Production with Systemd + +Move the binary to a system location: + +```bash +sudo mv flatrun-agent /usr/local/bin/ +sudo chmod +x /usr/local/bin/flatrun-agent +``` + +Create `/etc/systemd/system/flatrun-agent.service`: + +```ini +[Unit] +Description=FlatRun Agent +After=network.target docker.service +Requires=docker.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/flatrun +ExecStart=/usr/local/bin/flatrun-agent --config /opt/flatrun/config.yml +Restart=always +RestartSec=10 +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target +``` + +Enable and start: + +```bash +sudo systemctl daemon-reload +sudo systemctl enable flatrun-agent +sudo systemctl start flatrun-agent +sudo systemctl status flatrun-agent +sudo journalctl -u flatrun-agent -f +``` diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 0000000..604e6cb --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,19 @@ +## Overview + +FlatRun Agent is the backend service that manages Docker deployments through a simple filesystem-based approach. It monitors your deployments directory and provides a REST API for the FlatRun UI. + +### Features + +- Docker Compose deployment management +- Container lifecycle control (start, stop, restart) +- Real-time container monitoring and logs +- Docker resource management (images, volumes, networks) +- SSL certificate monitoring +- Quick App templates for rapid deployment +- JWT-based API authentication +- Health monitoring and statistics +- Plugin architecture for extensibility + +### Architecture + +The agent follows a flat-file approach: each deployment is a directory containing a `docker-compose.yml` file. The agent watches the configured deployments directory and manages the containers through the Docker API. It communicates with the FlatRun UI through a REST API and uses JWT tokens for authentication. diff --git a/docs/security.md b/docs/security.md new file mode 100644 index 0000000..292e065 --- /dev/null +++ b/docs/security.md @@ -0,0 +1,23 @@ +## Security + +- Use strong, unique API keys. +- Generate a secure JWT secret: `openssl rand -base64 32`. +- Run behind a reverse proxy (nginx) with HTTPS in production. +- Restrict Docker socket access appropriately. +- Keep the agent updated. + +### Troubleshooting + +**Agent won't start:** +- Check Docker is running: `systemctl status docker` +- Verify Docker socket permissions: `ls -la /var/run/docker.sock` +- Validate the config YAML syntax + +**Authentication issues:** +- Ensure the API key matches between UI and agent config +- Verify JWT secret is set +- Check CORS origins include your UI URL + +**Can't see deployments:** +- Verify `deployments_path` exists and is readable +- Check each deployment has a valid `docker-compose.yml` From b366f72a991edcaa056cf59e64a4442aa6cfc0b7 Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 19:50:58 +0100 Subject: [PATCH 2/8] docs: add OpenAPI 3.2 spec for FlatRun Agent --- docs/flatrun-agent-openapi.yaml | 14057 ++++++++++++++++++++++++++++++ 1 file changed, 14057 insertions(+) create mode 100644 docs/flatrun-agent-openapi.yaml diff --git a/docs/flatrun-agent-openapi.yaml b/docs/flatrun-agent-openapi.yaml new file mode 100644 index 0000000..508fc5b --- /dev/null +++ b/docs/flatrun-agent-openapi.yaml @@ -0,0 +1,14057 @@ +openapi: 3.2.0 +info: + title: FlatRun Agent API + version: 1.0.0 + description: REST API for FlatRun Agent, a lightweight Docker Compose orchestration + platform. Manage deployments, containers, networks, certificates, and more. +servers: +- url: https://{host} + variables: + host: + default: your-server.com + description: FlatRun Agent server hostname +paths: + /api/health: + get: + tags: + - system + summary: Check server health + operationId: health_get_api_health + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/auth/status: + get: + tags: + - authentication + summary: Get auth configuration status + operationId: health_get_api_auth_status + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/auth/login: + post: + tags: + - authentication + summary: Authenticate user and return JWT + operationId: health_post_api_auth_login + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/auth/validate: + get: + tags: + - authentication + summary: Validate JWT token and return actor context + operationId: health_get_api_auth_validate + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/stats: + get: + tags: + - system + - perm_deployments + summary: Get system stats + operationId: health_get_api_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/server/info: + get: + tags: + - system + - perm_system + summary: Get server info + operationId: health_get_api_server_info + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/server/network-health: + get: + tags: + - system + - perm_system + summary: Get network health + operationId: health_get_api_server_network-health + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/subdomain/generate: + get: + tags: + - deployments + - perm_deployments + summary: Generate a random subdomain + operationId: health_get_api_subdomain_generate + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/setup/status: + get: + tags: + - setup + summary: Get setup status + operationId: setup_get_api_setup_status + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/setup/info: + get: + tags: + - setup + summary: Get setup info + operationId: setup_get_api_setup_info + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/setup/validate: + post: + tags: + - setup + summary: Validate system requirements + operationId: setup_post_api_setup_validate + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/setup/verify-dns: + get: + tags: + - setup + summary: Verify DNS configuration + operationId: setup_get_api_setup_verify-dns + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/setup/settings: + post: + tags: + - setup + summary: Configure settings during setup + operationId: setup_post_api_setup_settings + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/setup/authentication: + post: + tags: + - setup + summary: Configure authentication during setup + operationId: setup_post_api_setup_authentication + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/setup/complete: + post: + tags: + - setup + summary: Complete initial setup + operationId: setup_post_api_setup_complete + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/deployments: + get: + tags: + - deployments + - perm_deployments + summary: List all deployments + operationId: deployments_get_api_deployments + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - deployments + - perm_deployments + summary: Create a deployment + operationId: deployments_post_api_deployments + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}: + get: + tags: + - deployments + - perm_deployments + summary: Get a deployment by name + operationId: deployments_get_api_deployments_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - deployments + - perm_deployments + summary: Update a deployment + operationId: deployments_put_api_deployments_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - deployments + - perm_deployments + summary: Delete a deployment + operationId: deployments_delete_api_deployments_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/metadata: + put: + tags: + - deployments + - perm_deployments + summary: Update deployment metadata + operationId: deployments_put_api_deployments_name_metadata + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/protected-mode: + put: + tags: + - deployments + - perm_deployments + summary: Toggle protected mode on deployment + operationId: deployments_put_api_deployments_name_protected-mode + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/start: + post: + tags: + - deployments + - perm_deployments + summary: Start a deployment + operationId: deployments_post_api_deployments_name_start + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/stop: + post: + tags: + - deployments + - perm_deployments + summary: Stop a deployment + operationId: deployments_post_api_deployments_name_stop + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/restart: + post: + tags: + - deployments + - perm_deployments + summary: Restart a deployment + operationId: deployments_post_api_deployments_name_restart + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/rebuild: + post: + tags: + - deployments + - perm_deployments + summary: Rebuild a deployment + operationId: deployments_post_api_deployments_name_rebuild + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/deploy: + post: + tags: + - deployments + - perm_deployments + summary: Deploy a deployment + operationId: deployments_post_api_deployments_name_deploy + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/pull: + post: + tags: + - deployments + - perm_deployments + summary: Pull deployment images + operationId: deployments_post_api_deployments_name_pull + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/images: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment images + operationId: deployments_get_api_deployments_name_images + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/jobs/active: + get: + tags: + - deployments + - perm_deployments + summary: Get active deployment job + operationId: deployments_get_api_deployments_name_jobs_active + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/jobs/{jobId}: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment job by ID + operationId: deployments_get_api_deployments_name_jobs_jobId + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: jobId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/logs: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment logs + operationId: deployments_get_api_deployments_name_logs + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/compose: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment compose file + operationId: deployments_get_api_deployments_name_compose + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/compose/mount: + post: + tags: + - deployments + - perm_deployments + summary: Add compose volume mount + operationId: deployments_post_api_deployments_name_compose_mount + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services: + get: + tags: + - deployments + - perm_deployments + summary: List deployment services + operationId: deployments_get_api_deployments_name_services + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/actions/{actionId}: + post: + tags: + - deployments + - perm_deployments + summary: Execute quick action + operationId: deployments_post_api_deployments_name_actions_actionId + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: actionId + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/env: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment environment variables + operationId: deployments_get_api_deployments_name_env + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - deployments + - perm_deployments + summary: Update deployment environment variables + operationId: deployments_put_api_deployments_name_env + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/files: + get: + tags: + - deployments + - perm_deployments + summary: List deployment files + operationId: deployments_get_api_deployments_name_files + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/files/{path}: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment file content + operationId: deployments_get_api_deployments_name_files_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - deployments + - perm_deployments + summary: Upload deployment file + operationId: deployments_post_api_deployments_name_files_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - deployments + - perm_deployments + summary: Delete deployment file + operationId: deployments_delete_api_deployments_name_files_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/mkdir/{path}: + post: + tags: + - deployments + - perm_deployments + summary: Create deployment directory + operationId: deployments_post_api_deployments_name_mkdir_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/touch/{path}: + post: + tags: + - deployments + - perm_deployments + summary: Create deployment empty file + operationId: deployments_post_api_deployments_name_touch_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/permissions/{path}: + put: + tags: + - deployments + - perm_deployments + summary: Change deployment file permissions + operationId: deployments_put_api_deployments_name_permissions_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/files-info: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment files info + operationId: deployments_get_api_deployments_name_files-info + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/stats: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment container stats + operationId: deployments_get_api_deployments_name_stats + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/resources: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment resource usage + operationId: deployments_get_api_deployments_name_resources + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/domains: + get: + tags: + - deployments + - perm_deployments + summary: List deployment domains + operationId: deployments_get_api_deployments_name_domains + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - deployments + - perm_deployments + summary: Add domain to deployment + operationId: deployments_post_api_deployments_name_domains + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/domains/{domainId}: + put: + tags: + - deployments + - perm_deployments + summary: Update deployment domain + operationId: deployments_put_api_deployments_name_domains_domainId + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: domainId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - deployments + - perm_deployments + summary: Remove domain from deployment + operationId: deployments_delete_api_deployments_name_domains_domainId + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: domainId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/traffic: + get: + tags: + - deployments + - perm_deployments + summary: Get deployment traffic stats + operationId: deployments_get_api_deployments_name_traffic + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/backups: + get: + tags: + - deployments + - perm_backups + summary: List deployment backups + operationId: deployments_get_api_deployments_name_backups + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - deployments + - perm_backups + summary: Create deployment backup + operationId: deployments_post_api_deployments_name_backups + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/backup-config: + get: + tags: + - deployments + - perm_backups + summary: Get deployment backup config + operationId: deployments_get_api_deployments_name_backup-config + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - deployments + - perm_backups + summary: Update deployment backup config + operationId: deployments_put_api_deployments_name_backup-config + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/security: + get: + tags: + - deployments + - perm_security + summary: Get deployment security config + operationId: deployments_get_api_deployments_name_security + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - deployments + - perm_security + summary: Update deployment security config + operationId: deployments_put_api_deployments_name_security + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/security/events: + get: + tags: + - deployments + - perm_security + summary: Get deployment security events + operationId: deployments_get_api_deployments_name_security_events + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/users: + get: + tags: + - deployments + - perm_users + summary: Get deployment users + operationId: deployments_get_api_deployments_name_users + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services/{service}/start: + post: + tags: + - services + - perm_deployments + summary: Start a service in a deployment + operationId: services_post_api_deployments_name_services_service_start + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: service + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services/{service}/stop: + post: + tags: + - services + - perm_deployments + summary: Stop a service in a deployment + operationId: services_post_api_deployments_name_services_service_stop + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: service + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services/{service}/restart: + post: + tags: + - services + - perm_deployments + summary: Restart a service in a deployment + operationId: services_post_api_deployments_name_services_service_restart + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: service + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services/{service}/job: + post: + tags: + - services + - perm_deployments + summary: Enqueue a job for a service + operationId: services_post_api_deployments_name_services_service_job + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: service + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services/{service}/rebuild: + post: + tags: + - services + - perm_deployments + summary: Rebuild a service in a deployment + operationId: services_post_api_deployments_name_services_service_rebuild + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: service + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/services/{service}/pull: + post: + tags: + - services + - perm_deployments + summary: Pull image for a service in a deployment + operationId: services_post_api_deployments_name_services_service_pull + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: service + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/proxy/status/{name}: + get: + tags: + - proxy + - perm_certificates + summary: Get proxy status for deployment + operationId: proxy_get_api_proxy_status_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/proxy/setup/{name}: + post: + tags: + - proxy + - perm_certificates + summary: Setup proxy for deployment + operationId: proxy_post_api_proxy_setup_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/proxy/{name}: + delete: + tags: + - proxy + - perm_certificates + summary: Teardown proxy for deployment + operationId: proxy_delete_api_proxy_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/proxy/vhosts: + get: + tags: + - proxy + - perm_certificates + summary: List virtual hosts + operationId: proxy_get_api_proxy_vhosts + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/proxy/sync: + post: + tags: + - proxy + - perm_certificates + summary: Sync all proxies + operationId: proxy_post_api_proxy_sync + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/ssl/disable: + post: + tags: + - proxy + - perm_deployments + summary: Disable SSL for deployment + operationId: proxy_post_api_deployments_name_ssl_disable + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/certificates/renew: + post: + tags: + - proxy + - perm_certificates + summary: Renew deployment certificates + operationId: proxy_post_api_deployments_name_certificates_renew + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/certificates: + get: + tags: + - certificates + - perm_certificates + summary: List certificates + operationId: certificates_get_api_certificates + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - certificates + - perm_certificates + summary: Request a new certificate + operationId: certificates_post_api_certificates + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/certificates/renew: + post: + tags: + - certificates + - perm_certificates + summary: Renew all expiring certificates + operationId: certificates_post_api_certificates_renew + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/certificates/{domain}: + get: + tags: + - certificates + - perm_certificates + summary: Get certificate for domain + operationId: certificates_get_api_certificates_domain + parameters: + - name: domain + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - certificates + - perm_certificates + summary: Delete certificate + operationId: certificates_delete_api_certificates_domain + parameters: + - name: domain + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/certificates/{domain}/renew: + post: + tags: + - certificates + - perm_certificates + summary: Renew certificate for domain + operationId: certificates_post_api_certificates_domain_renew + parameters: + - name: domain + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/certificates/{domain}/auto-renew: + patch: + tags: + - certificates + - perm_certificates + summary: Toggle auto-renew for certificate + operationId: certificates_patch_api_certificates_domain_auto-renew + parameters: + - name: domain + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/networks: + get: + tags: + - networks + - perm_networks + summary: List networks + operationId: networks_get_api_networks + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - networks + - perm_networks + summary: Create a network + operationId: networks_post_api_networks + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/networks/{name}: + delete: + tags: + - networks + - perm_networks + summary: Delete a network + operationId: networks_delete_api_networks_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/networks/{name}/connect: + post: + tags: + - networks + - perm_networks + summary: Connect container to network + operationId: networks_post_api_networks_name_connect + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/networks/{name}/disconnect: + post: + tags: + - networks + - perm_networks + summary: Disconnect container from network + operationId: networks_post_api_networks_name_disconnect + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers: + get: + tags: + - containers + - perm_containers + summary: List containers + operationId: containers_get_api_containers + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}/start: + post: + tags: + - containers + - perm_containers + summary: Start a container + operationId: containers_post_api_containers_id_start + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}/stop: + post: + tags: + - containers + - perm_containers + summary: Stop a container + operationId: containers_post_api_containers_id_stop + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}/restart: + post: + tags: + - containers + - perm_containers + summary: Restart a container + operationId: containers_post_api_containers_id_restart + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}: + delete: + tags: + - containers + - perm_containers + summary: Remove a container + operationId: containers_delete_api_containers_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}/logs: + get: + tags: + - containers + - perm_containers + summary: Get container logs + operationId: containers_get_api_containers_id_logs + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}/stats: + get: + tags: + - containers + - perm_containers + summary: Get container stats + operationId: containers_get_api_containers_id_stats + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/stats: + get: + tags: + - containers + - perm_containers + summary: Get stats for all containers + operationId: containers_get_api_containers_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/containers/{id}/exec: + post: + tags: + - containers + - perm_containers + summary: Execute command in container (HTTP) + operationId: containers_post_api_containers_id_exec + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + get: + tags: + - websockets + summary: Execute command in container (WebSocket) + operationId: websocket_get_api_containers_id_exec + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/containers/{id}/resources: + get: + tags: + - containers + - perm_containers + summary: Get container resource limits + operationId: containers_get_api_containers_id_resources + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - containers + - perm_containers + summary: Update container resource limits + operationId: containers_put_api_containers_id_resources + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/images: + get: + tags: + - images + - perm_images + summary: List Docker images + operationId: images_get_api_images + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/images/{id}: + delete: + tags: + - images + - perm_images + summary: Remove a Docker image + operationId: images_delete_api_images_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/images/pull: + post: + tags: + - images + - perm_images + summary: Pull a Docker image + operationId: images_post_api_images_pull + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/images/cleanup: + post: + tags: + - images + - perm_images + summary: Clean up unused images + operationId: images_post_api_images_cleanup + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/images/cleanup: + post: + tags: + - images + - perm_images + summary: Clean up deployment images + operationId: images_post_api_deployments_name_images_cleanup + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/volumes: + get: + tags: + - volumes + - perm_volumes + summary: List volumes + operationId: volumes_get_api_volumes + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - volumes + - perm_volumes + summary: Create a volume + operationId: volumes_post_api_volumes + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/volumes/{name}: + delete: + tags: + - volumes + - perm_volumes + summary: Remove a volume + operationId: volumes_delete_api_volumes_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/volumes/prune: + post: + tags: + - volumes + - perm_volumes + summary: Prune unused volumes + operationId: volumes_post_api_volumes_prune + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ports: + get: + tags: + - ports + - perm_system + summary: List open ports + operationId: ports_get_api_ports + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ports/{pid}/kill: + post: + tags: + - ports + - perm_system + summary: Kill process by PID + operationId: ports_post_api_ports_pid_kill + parameters: + - name: pid + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/services: + get: + tags: + - system_services + - perm_system + summary: List system services + operationId: system-services_get_api_system_services + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/services/{name}/start: + post: + tags: + - system_services + - perm_system + summary: Start a system service + operationId: system-services_post_api_system_services_name_start + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/services/{name}/stop: + post: + tags: + - system_services + - perm_system + summary: Stop a system service + operationId: system-services_post_api_system_services_name_stop + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/services/{name}/restart: + post: + tags: + - system_services + - perm_system + summary: Restart a system service + operationId: system-services_post_api_system_services_name_restart + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/files: + get: + tags: + - system_files + - perm_system + summary: List system files + operationId: system-files_get_api_system_files + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/files-info: + get: + tags: + - system_files + - perm_system + summary: Get system files info + operationId: system-files_get_api_system_files-info + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/files/{path}: + get: + tags: + - system_files + - perm_system + summary: Get system file content + operationId: system-files_get_api_system_files_path + parameters: + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - system_files + - perm_system + summary: Upload system file + operationId: system-files_post_api_system_files_path + parameters: + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - system_files + - perm_system + summary: Delete system file + operationId: system-files_delete_api_system_files_path + parameters: + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/mkdir/{path}: + post: + tags: + - system_files + - perm_system + summary: Create system directory + operationId: system-files_post_api_system_mkdir_path + parameters: + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/touch/{path}: + post: + tags: + - system_files + - perm_system + summary: Create system empty file + operationId: system-files_post_api_system_touch_path + parameters: + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/permissions/{path}: + put: + tags: + - system_files + - perm_system + summary: Change system file permissions + operationId: system-files_put_api_system_permissions_path + parameters: + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/settings: + get: + tags: + - settings + - perm_settings + summary: Get application settings + operationId: settings_get_api_settings + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - settings + - perm_settings + summary: Update application settings + operationId: settings_put_api_settings + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/settings/security: + put: + tags: + - settings + - perm_settings + summary: Update security settings + operationId: settings_put_api_settings_security + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/config: + get: + tags: + - config + - perm_config + summary: List configuration keys + operationId: config_get_api_config + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/config/{key}: + get: + tags: + - config + - perm_config + summary: Get configuration value + operationId: config_get_api_config_key + parameters: + - name: key + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - config + - perm_config + summary: Update configuration value + operationId: config_put_api_config_key + parameters: + - name: key + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/plans: + get: + tags: + - plans + summary: List plans + operationId: plans_get_api_plans + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/plans/{id}: + get: + tags: + - plans + summary: Get plan by ID + operationId: plans_get_api_plans_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - plans + summary: Delete a plan + operationId: plans_delete_api_plans_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/plans/{id}/apply: + post: + tags: + - plans + summary: Apply a plan + operationId: plans_post_api_plans_id_apply + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ai/status: + get: + tags: + - ai + summary: Get AI assistant status + operationId: ai_get_api_ai_status + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ai/analyze: + post: + tags: + - ai + - perm_deployments + summary: Analyze system with AI + operationId: ai_post_api_ai_analyze + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/deployments/{name}/ai/analyze: + post: + tags: + - ai + - perm_deployments + summary: Analyze deployment with AI + operationId: ai_post_api_deployments_name_ai_analyze + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ai/sessions: + post: + tags: + - ai + - perm_deployments + summary: Create AI session + operationId: ai_post_api_ai_sessions + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ai/sessions/{id}: + get: + tags: + - ai + summary: Get AI session + operationId: ai_get_api_ai_sessions_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - ai + summary: Delete AI session + operationId: ai_delete_api_ai_sessions_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ai/sessions/{id}/messages: + post: + tags: + - ai + summary: Send AI session message + operationId: ai_post_api_ai_sessions_id_messages + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/ai/sessions/{id}/approve: + post: + tags: + - ai + summary: Approve AI session tool calls + operationId: ai_post_api_ai_sessions_id_approve + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates: + get: + tags: + - templates + - perm_templates + summary: List deployment templates + operationId: templates_get_api_templates + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates/categories: + get: + tags: + - templates + - perm_templates + summary: Get template categories + operationId: templates_get_api_templates_categories + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates/refresh: + post: + tags: + - templates + - perm_templates + summary: Refresh templates from registry + operationId: templates_post_api_templates_refresh + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates/{id}/compose: + get: + tags: + - templates + - perm_templates + summary: Get template compose file + operationId: templates_get_api_templates_id_compose + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates/{id}/generate: + post: + tags: + - templates + - perm_templates + summary: Generate compose from template + operationId: templates_post_api_templates_id_generate + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates/infra/{name}/compose: + get: + tags: + - templates + - perm_templates + summary: Get infra template compose + operationId: templates_get_api_templates_infra_name_compose + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/templates/infra/{name}/generate: + post: + tags: + - templates + - perm_templates + summary: Generate compose from infra template + operationId: templates_post_api_templates_infra_name_generate + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/plugins: + get: + tags: + - plugins + - perm_templates + summary: List plugins + operationId: plugins_get_api_plugins + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/plugins/{name}: + get: + tags: + - plugins + - perm_templates + summary: Get plugin details + operationId: plugins_get_api_plugins_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/plugins/{name}/deployments: + post: + tags: + - plugins + - perm_templates + summary: Create deployment from plugin + operationId: plugins_post_api_plugins_name_deployments + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/test: + post: + tags: + - databases + - perm_databases + summary: Test database connection + operationId: databases_post_api_databases_test + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/list: + post: + tags: + - databases + - perm_databases + summary: List databases on server + operationId: databases_post_api_databases_list + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/tables: + post: + tags: + - databases + - perm_databases + summary: List database tables + operationId: databases_post_api_databases_tables + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/tables/data: + post: + tags: + - databases + - perm_databases + summary: Query table data + operationId: databases_post_api_databases_tables_data + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/tables/schema: + post: + tags: + - databases + - perm_databases + summary: Describe table schema + operationId: databases_post_api_databases_tables_schema + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/query: + post: + tags: + - databases + - perm_databases + summary: Execute database query + operationId: databases_post_api_databases_query + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/users: + post: + tags: + - databases + - perm_databases + summary: List database users + operationId: databases_post_api_databases_users + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/users/by-database: + post: + tags: + - databases + - perm_databases + summary: List database users by database + operationId: databases_post_api_databases_users_by-database + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/create: + post: + tags: + - databases + - perm_databases + summary: Create a database + operationId: databases_post_api_databases_create + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/delete: + post: + tags: + - databases + - perm_databases + summary: Delete a database + operationId: databases_post_api_databases_delete + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/users/create: + post: + tags: + - databases + - perm_databases + summary: Create database user + operationId: databases_post_api_databases_users_create + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/users/delete: + post: + tags: + - databases + - perm_databases + summary: Delete database user + operationId: databases_post_api_databases_users_delete + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/databases/privileges/grant: + post: + tags: + - databases + - perm_databases + summary: Grant database privileges + operationId: databases_post_api_databases_privileges_grant + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure: + get: + tags: + - infrastructure + - perm_infrastructure + summary: List infrastructure services + operationId: infrastructure_get_api_infrastructure + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/stats: + get: + tags: + - infrastructure + - perm_infrastructure + summary: Get infrastructure stats + operationId: infrastructure_get_api_infrastructure_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/{name}: + get: + tags: + - infrastructure + - perm_infrastructure + summary: Get infrastructure service + operationId: infrastructure_get_api_infrastructure_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/{name}/start: + post: + tags: + - infrastructure + - perm_infrastructure + summary: Start infrastructure service + operationId: infrastructure_post_api_infrastructure_name_start + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/{name}/stop: + post: + tags: + - infrastructure + - perm_infrastructure + summary: Stop infrastructure service + operationId: infrastructure_post_api_infrastructure_name_stop + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/{name}/restart: + post: + tags: + - infrastructure + - perm_infrastructure + summary: Restart infrastructure service + operationId: infrastructure_post_api_infrastructure_name_restart + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/{name}/logs: + get: + tags: + - infrastructure + - perm_infrastructure + summary: Get infrastructure service logs + operationId: infrastructure_get_api_infrastructure_name_logs + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/infrastructure/migrate/{name}: + post: + tags: + - infrastructure + - perm_infrastructure + summary: Migrate deployment to infrastructure + operationId: infrastructure_post_api_infrastructure_migrate_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/registries: + get: + tags: + - registries + - perm_registries + summary: List registry types + operationId: registries_get_api_registries + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - registries + - perm_registries + summary: Create registry type + operationId: registries_post_api_registries + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/registries/{slug}: + get: + tags: + - registries + - perm_registries + summary: Get registry type + operationId: registries_get_api_registries_slug + parameters: + - name: slug + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - registries + - perm_registries + summary: Update registry type + operationId: registries_put_api_registries_slug + parameters: + - name: slug + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - registries + - perm_registries + summary: Delete registry type + operationId: registries_delete_api_registries_slug + parameters: + - name: slug + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/credentials: + get: + tags: + - credentials + - perm_registries + summary: List credentials + operationId: credentials_get_api_credentials + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - credentials + - perm_registries + summary: Create credential + operationId: credentials_post_api_credentials + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/credentials/{id}: + get: + tags: + - credentials + - perm_registries + summary: Get credential + operationId: credentials_get_api_credentials_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - credentials + - perm_registries + summary: Update credential + operationId: credentials_put_api_credentials_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - credentials + - perm_registries + summary: Delete credential + operationId: credentials_delete_api_credentials_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/credentials/{id}/test: + post: + tags: + - credentials + - perm_registries + summary: Test credential + operationId: credentials_post_api_credentials_id_test + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/stats: + get: + tags: + - security + - perm_security + summary: Get security stats + operationId: security_get_api_security_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/events: + get: + tags: + - security + - perm_security + summary: List security events + operationId: security_get_api_security_events + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/events/{id}: + get: + tags: + - security + - perm_security + summary: Get security event + operationId: security_get_api_security_events_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/cleanup: + post: + tags: + - security + - perm_security + summary: Clean up security events + operationId: security_post_api_security_cleanup + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/blocked-ips: + get: + tags: + - security + - perm_security + summary: List blocked IPs + operationId: security_get_api_security_blocked-ips + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - security + - perm_security + summary: Block an IP + operationId: security_post_api_security_blocked-ips + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/blocked-ips/{ip}: + delete: + tags: + - security + - perm_security + summary: Unblock an IP + operationId: security_delete_api_security_blocked-ips_ip + parameters: + - name: ip + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/ips/{ip}/events: + get: + tags: + - security + - perm_security + summary: Get security events by IP + operationId: security_get_api_security_ips_ip_events + parameters: + - name: ip + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/protected-routes: + get: + tags: + - security + - perm_security + summary: List protected routes + operationId: security_get_api_security_protected-routes + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - security + - perm_security + summary: Add protected route + operationId: security_post_api_security_protected-routes + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/protected-routes/{id}: + put: + tags: + - security + - perm_security + summary: Update protected route + operationId: security_put_api_security_protected-routes_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - security + - perm_security + summary: Delete protected route + operationId: security_delete_api_security_protected-routes_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/whitelist: + get: + tags: + - security + - perm_security + summary: List whitelist entries + operationId: security_get_api_security_whitelist + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - security + - perm_security + summary: Add whitelist entry + operationId: security_post_api_security_whitelist + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/whitelist/{id}: + delete: + tags: + - security + - perm_security + summary: Remove whitelist entry + operationId: security_delete_api_security_whitelist_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/realtime-capture: + get: + tags: + - security + - perm_security + summary: Get realtime capture status + operationId: security_get_api_security_realtime-capture + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - security + - perm_security + summary: Set realtime capture status + operationId: security_put_api_security_realtime-capture + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/health: + get: + tags: + - security + - perm_security + summary: Get security health + operationId: security_get_api_security_health + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/security/refresh: + post: + tags: + - security + - perm_security + summary: Refresh security scripts + operationId: security_post_api_security_refresh + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/traffic/logs: + get: + tags: + - traffic + - perm_traffic + summary: Get traffic logs + operationId: traffic_get_api_traffic_logs + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/traffic/stats: + get: + tags: + - traffic + - perm_traffic + summary: Get traffic stats + operationId: traffic_get_api_traffic_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/traffic/unknown-domains: + get: + tags: + - traffic + - perm_traffic + summary: Get unknown domain stats + operationId: traffic_get_api_traffic_unknown-domains + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/traffic/cleanup: + post: + tags: + - traffic + - perm_traffic + summary: Clean up traffic logs + operationId: traffic_post_api_traffic_cleanup + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/backups: + get: + tags: + - backups + - perm_backups + summary: List backups + operationId: backups_get_api_backups + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - backups + - perm_backups + summary: Create a backup + operationId: backups_post_api_backups + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/backups/{id}: + get: + tags: + - backups + - perm_backups + summary: Get backup + operationId: backups_get_api_backups_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - backups + - perm_backups + summary: Delete a backup + operationId: backups_delete_api_backups_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/backups/{id}/download: + get: + tags: + - backups + - perm_backups + summary: Download backup + operationId: backups_get_api_backups_id_download + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/backups/{id}/restore: + post: + tags: + - backups + - perm_backups + summary: Restore from backup + operationId: backups_post_api_backups_id_restore + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/backups/jobs: + get: + tags: + - backups + - perm_backups + summary: List backup jobs + operationId: backups_get_api_backups_jobs + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/backups/jobs/{id}: + get: + tags: + - backups + - perm_backups + summary: Get backup job + operationId: backups_get_api_backups_jobs_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/scheduler/tasks: + get: + tags: + - scheduler + - perm_scheduler + summary: List scheduled tasks + operationId: scheduler_get_api_scheduler_tasks + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - scheduler + - perm_scheduler + summary: Create scheduled task + operationId: scheduler_post_api_scheduler_tasks + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/scheduler/tasks/{id}: + get: + tags: + - scheduler + - perm_scheduler + summary: Get scheduled task + operationId: scheduler_get_api_scheduler_tasks_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - scheduler + - perm_scheduler + summary: Update scheduled task + operationId: scheduler_put_api_scheduler_tasks_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - scheduler + - perm_scheduler + summary: Delete scheduled task + operationId: scheduler_delete_api_scheduler_tasks_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/scheduler/tasks/{id}/run: + post: + tags: + - scheduler + - perm_scheduler + summary: Run scheduled task now + operationId: scheduler_post_api_scheduler_tasks_id_run + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/scheduler/tasks/{id}/executions: + get: + tags: + - scheduler + - perm_scheduler + summary: Get task executions + operationId: scheduler_get_api_scheduler_tasks_id_executions + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/scheduler/executions: + get: + tags: + - scheduler + - perm_scheduler + summary: Get recent executions + operationId: scheduler_get_api_scheduler_executions + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/audit/events: + get: + tags: + - audit + - perm_audit + summary: List audit events + operationId: audit_get_api_audit_events + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/audit/events/{id}: + get: + tags: + - audit + - perm_audit + summary: Get audit event + operationId: audit_get_api_audit_events_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/audit/stats: + get: + tags: + - audit + - perm_audit + summary: Get audit stats + operationId: audit_get_api_audit_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/audit/export: + post: + tags: + - audit + - perm_audit + summary: Export audit events + operationId: audit_post_api_audit_export + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/audit/cleanup: + delete: + tags: + - audit + - perm_settings + summary: Clean up audit events + operationId: audit_delete_api_audit_cleanup + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/users/me: + get: + tags: + - users + summary: Get current user profile + operationId: users_get_api_users_me + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - users + summary: Update current user profile + operationId: users_put_api_users_me + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/users/me/password: + put: + tags: + - users + summary: Update current user password + operationId: users_put_api_users_me_password + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/users: + get: + tags: + - users + - perm_users + summary: List users + operationId: users_get_api_users + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - users + - perm_users + summary: Create user + operationId: users_post_api_users + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/users/{id}: + get: + tags: + - users + - perm_users + summary: Get user + operationId: users_get_api_users_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - users + - perm_users + summary: Update user + operationId: users_put_api_users_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - users + - perm_users + summary: Delete user + operationId: users_delete_api_users_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/users/{id}/deployments: + get: + tags: + - users + summary: Get user deployments + operationId: users_get_api_users_id_deployments + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - users + - perm_users + summary: Assign deployment to user + operationId: users_post_api_users_id_deployments + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/users/{id}/deployments/{name}: + put: + tags: + - users + - perm_users + summary: Update user deployment access + operationId: users_put_api_users_id_deployments_name + parameters: + - name: id + in: path + required: true + schema: + type: integer + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - users + - perm_users + summary: Remove user deployment access + operationId: users_delete_api_users_id_deployments_name + parameters: + - name: id + in: path + required: true + schema: + type: integer + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/apikeys: + get: + tags: + - api_keys + - perm_apikeys + summary: List API keys + operationId: apikeys_get_api_apikeys + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - api_keys + - perm_apikeys + summary: Create API key + operationId: apikeys_post_api_apikeys + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/apikeys/{id}: + get: + tags: + - api_keys + - perm_apikeys + summary: Get API key + operationId: apikeys_get_api_apikeys_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + put: + tags: + - api_keys + - perm_apikeys + summary: Update API key + operationId: apikeys_put_api_apikeys_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - api_keys + - perm_apikeys + summary: Delete API key + operationId: apikeys_delete_api_apikeys_id + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/apikeys/{id}/revoke: + post: + tags: + - api_keys + - perm_apikeys + summary: Revoke API key + operationId: apikeys_post_api_apikeys_id_revoke + parameters: + - name: id + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/providers: + get: + tags: + - dns + - perm_dns + summary: List DNS providers + operationId: dns_get_api_dns_providers + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/powerdns/status: + get: + tags: + - dns + - perm_dns + summary: Get PowerDNS status + operationId: dns_get_api_dns_powerdns_status + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/powerdns/enable: + post: + tags: + - dns + - perm_dns + summary: Enable PowerDNS service + operationId: dns_post_api_dns_powerdns_enable + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/powerdns/disable: + post: + tags: + - dns + - perm_dns + summary: Disable PowerDNS service + operationId: dns_post_api_dns_powerdns_disable + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/powerdns/restart: + post: + tags: + - dns + - perm_dns + summary: Restart PowerDNS service + operationId: dns_post_api_dns_powerdns_restart + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/powerdns/zones: + get: + tags: + - dns + - perm_dns + summary: List DNS zones + operationId: dns_get_api_dns_powerdns_zones + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: + tags: + - dns + - perm_dns + summary: Create DNS zone + operationId: dns_post_api_dns_powerdns_zones + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/dns/powerdns/zones/{zoneId}: + get: + tags: + - dns + - perm_dns + summary: Get DNS zone + operationId: dns_get_api_dns_powerdns_zones_zoneId + parameters: + - name: zoneId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + delete: + tags: + - dns + - perm_dns + summary: Delete DNS zone + operationId: dns_delete_api_dns_powerdns_zones_zoneId + parameters: + - name: zoneId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + patch: + tags: + - dns + - perm_dns + summary: Update DNS records + operationId: dns_patch_api_dns_powerdns_zones_zoneId + parameters: + - name: zoneId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/status: + get: + tags: + - cluster + - perm_cluster + summary: Get cluster status + operationId: cluster_get_api_cluster_status + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/peers: + get: + tags: + - cluster + - perm_cluster + summary: List cluster peers + operationId: cluster_get_api_cluster_peers + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/invite: + post: + tags: + - cluster + - perm_cluster + summary: Invite peer to cluster + operationId: cluster_post_api_cluster_invite + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/accept: + post: + tags: + - cluster + - perm_cluster + summary: Accept cluster invitation + operationId: cluster_post_api_cluster_accept + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/peers/{name}: + delete: + tags: + - cluster + - perm_cluster + summary: Remove cluster peer + operationId: cluster_delete_api_cluster_peers_name + parameters: + - name: name + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/peers/{name}/proxy/{path}: + get: &id001 + tags: + - cluster + - perm_cluster + summary: Proxy request to cluster peer + operationId: cluster_any_api_cluster_peers_name_proxy_path + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: path + in: path + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + post: *id001 + /api/cluster/deployments: + get: + tags: + - cluster + - perm_cluster + summary: List cluster deployments + operationId: cluster_get_api_cluster_deployments + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/cluster/stats: + get: + tags: + - cluster + - perm_cluster + summary: Get cluster stats + operationId: cluster_get_api_cluster_stats + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - BearerAuth: [] + - ApiKeyAuth: [] + /api/system/terminal: + get: + tags: + - websockets + summary: Open system terminal (WebSocket) + operationId: websocket_get_api_system_terminal + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/system/terminal/interactive: + get: + tags: + - websockets + summary: Open interactive system terminal (WebSocket) + operationId: websocket_get_api_system_terminal_interactive + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/deployments/{name}/jobs/{jobId}/stream: + get: + tags: + - websockets + summary: Stream deployment job logs (WebSocket) + operationId: websocket_get_api_deployments_name_jobs_jobId_stream + parameters: + - name: name + in: path + required: true + schema: + type: string + - name: jobId + in: path + required: true + schema: + type: integer + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/cluster/exchange: + post: + tags: + - cluster + summary: Exchange cluster invite (invite token auth) + operationId: internal_post_api_cluster_exchange + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/security/events/ingest: + post: + tags: + - internal + summary: Ingest security events from nginx + operationId: internal_post_api_security_events_ingest + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/traffic/ingest: + post: + tags: + - internal + summary: Ingest traffic logs from nginx + operationId: internal_post_api_traffic_ingest + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: [] + /api/_internal/blocked-ips: + get: + tags: + - internal + summary: List blocked IPs (internal) + operationId: internal_get_api_internal_blocked-ips + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - InternalToken: [] + /api/_internal/whitelist: + get: + tags: + - internal + summary: List whitelist entries (internal) + operationId: internal_get_api_internal_whitelist + parameters: [] + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Success' + '400': + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '404': + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - InternalToken: [] +components: + securitySchemes: + BearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + description: JWT Bearer token obtained from POST /api/auth/login + ApiKeyAuth: + type: http + scheme: bearer + description: API key authentication passed as Bearer token or ApiKey token + InternalToken: + type: apiKey + in: header + name: X-Internal-Token + description: Internal nginx communication token + schemas: + Error: + type: object + properties: + error: + type: string + description: Error message + code: + type: string + description: Error code + Success: + type: object + properties: + success: + type: boolean + message: + type: string + HealthStatus: + type: object + properties: + status: + type: string + enum: + - ok + - degraded + - down + version: + type: string + uptime: + type: integer + Deployment: + type: object + properties: + name: + type: string + status: + type: string + enum: + - running + - stopped + - error + - deploying + compose_version: + type: string + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + DeploymentList: + type: array + items: + $ref: '#/components/schemas/Deployment' + Container: + type: object + properties: + id: + type: string + name: + type: string + image: + type: string + status: + type: string + state: + type: string + ports: + type: array + items: + type: object + ContainerList: + type: array + items: + $ref: '#/components/schemas/Container' + Image: + type: object + properties: + id: + type: string + repository: + type: string + tag: + type: string + size: + type: integer + created: + type: string + format: date-time + ImageList: + type: array + items: + $ref: '#/components/schemas/Image' + Volume: + type: object + properties: + name: + type: string + driver: + type: string + mountpoint: + type: string + size: + type: integer + VolumeList: + type: array + items: + $ref: '#/components/schemas/Volume' + Network: + type: object + properties: + name: + type: string + id: + type: string + driver: + type: string + scope: + type: string + NetworkList: + type: array + items: + $ref: '#/components/schemas/Network' + Certificate: + type: object + properties: + domain: + type: string + issuer: + type: string + expires_at: + type: string + format: date-time + auto_renew: + type: boolean + status: + type: string + CertificateList: + type: array + items: + $ref: '#/components/schemas/Certificate' + User: + type: object + properties: + id: + type: integer + username: + type: string + email: + type: string + role: + type: string + enum: + - admin + - operator + - viewer + created_at: + type: string + format: date-time + UserList: + type: array + items: + $ref: '#/components/schemas/User' + APIKey: + type: object + properties: + id: + type: integer + name: + type: string + key_prefix: + type: string + role: + type: string + permissions: + type: array + items: + type: string + revoked: + type: boolean + created_at: + type: string + format: date-time + APIKeyList: + type: array + items: + $ref: '#/components/schemas/APIKey' + Backup: + type: object + properties: + id: + type: integer + name: + type: string + size: + type: integer + status: + type: string + created_at: + type: string + format: date-time + BackupList: + type: array + items: + $ref: '#/components/schemas/Backup' + ScheduledTask: + type: object + properties: + id: + type: integer + name: + type: string + cron: + type: string + action: + type: string + enabled: + type: boolean + last_run: + type: string + format: date-time + ScheduledTaskList: + type: array + items: + $ref: '#/components/schemas/ScheduledTask' + SecurityEvent: + type: object + properties: + id: + type: integer + type: + type: string + source_ip: + type: string + severity: + type: string + details: + type: object + timestamp: + type: string + format: date-time + SecurityEventList: + type: array + items: + $ref: '#/components/schemas/SecurityEvent' + TrafficLog: + type: object + properties: + id: + type: integer + domain: + type: string + method: + type: string + path: + type: string + status_code: + type: integer + bytes: + type: integer + timestamp: + type: string + format: date-time + TrafficLogList: + type: array + items: + $ref: '#/components/schemas/TrafficLog' + AuditEvent: + type: object + properties: + id: + type: integer + action: + type: string + actor: + type: string + resource: + type: string + details: + type: object + timestamp: + type: string + format: date-time + AuditEventList: + type: array + items: + $ref: '#/components/schemas/AuditEvent' + Plan: + type: object + properties: + id: + type: integer + name: + type: string + status: + type: string + changes: + type: array + items: + type: object + created_at: + type: string + format: date-time + PlanList: + type: array + items: + $ref: '#/components/schemas/Plan' + LoginRequest: + type: object + required: + - username + - password + properties: + username: + type: string + password: + type: string + format: password + LoginResponse: + type: object + properties: + token: + type: string + user: + $ref: '#/components/schemas/User' +tags: +- name: authentication + description: Authentication endpoints for login, token validation, and auth status. +- name: setup + description: Initial server setup and configuration endpoints. Only accessible before + setup is complete. +- name: deployments + description: Deployment lifecycle management including create, start, stop, restart, + and file management. +- name: services + description: 'Per-service actions within a deployment: start, stop, restart, rebuild.' +- name: networks + description: 'Docker network management: create, delete, connect, disconnect.' +- name: certificates + description: SSL/TLS certificate management with Let's Encrypt support and auto-renewal. +- name: proxy + description: Reverse proxy setup and management for deployments. +- name: containers + description: 'Container lifecycle management: start, stop, restart, exec, logs, + stats.' +- name: images + description: 'Docker image management: list, pull, remove, cleanup.' +- name: volumes + description: 'Docker volume management: create, list, remove, prune.' +- name: ports + description: Port and process management. +- name: system_services + description: System service management on the host. +- name: system_files + description: System-level file management (admin only). +- name: settings + description: Application settings configuration. +- name: config + description: Low-level configuration key-value store. +- name: plans + description: Deployment plan management. Plans represent pending or previewed changes. +- name: ai + description: AI assistant for system analysis and deployment management. +- name: templates + description: Deployment template management with compose generation. +- name: plugins + description: Plugin registry for extending deployment functionality. +- name: databases + description: 'Database server management: create, query, user management, privileges.' +- name: infrastructure + description: Infrastructure service management for external services. +- name: registries + description: Container registry type management. +- name: credentials + description: Credential management for registry authentication. +- name: security + description: Security event monitoring, IP blocking, whitelist, and WAF management. +- name: traffic + description: Traffic logging and analytics. +- name: backups + description: Backup creation, restoration, and management. +- name: scheduler + description: Scheduled task management with cron-based execution. +- name: audit + description: Audit event logging and export. +- name: users + description: User management with role-based access control. +- name: api_keys + description: API key management for programmatic access. +- name: dns + description: DNS provider and zone management with PowerDNS support. +- name: cluster + description: Multi-server cluster management for distributed deployments. +- name: websockets + description: WebSocket endpoints for real-time streaming (terminal, logs, exec). +- name: internal + description: Internal endpoints for nginx integration and cross-service communication. +- name: system + description: System health, stats, and server information endpoints. From 291e902d74df23b379582e977f86092445a01696 Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 19:53:18 +0100 Subject: [PATCH 3/8] docs: add OpenAPI spec reference to sidebar --- docs.json | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/docs.json b/docs.json index 229d507..2d0a2f9 100644 --- a/docs.json +++ b/docs.json @@ -8,11 +8,34 @@ "framework": "app" }, "sidebar": [ - { "title": "Overview", "path": "docs/overview.md" }, - { "title": "Installation", "path": "docs/installation.md" }, - { "title": "Configuration", "path": "docs/configuration.md" }, - { "title": "API Reference", "path": "docs/api-reference.md" }, - { "title": "Plugin Architecture", "path": "docs/PLUGIN_ARCHITECTURE.md" }, - { "title": "Security", "path": "docs/security.md" } - ] -} + { + "title": "Overview", + "path": "docs/overview.md" + }, + { + "title": "Installation", + "path": "docs/installation.md" + }, + { + "title": "Configuration", + "path": "docs/configuration.md" + }, + { + "title": "API Reference", + "path": "docs/api-reference.md" + }, + { + "title": "OpenAPI Spec", + "path": "docs/flatrun-agent-openapi.yaml" + }, + { + "title": "Plugin Architecture", + "path": "docs/PLUGIN_ARCHITECTURE.md" + }, + { + "title": "Security", + "path": "docs/security.md" + } + ], + "openapi": "docs/flatrun-agent-openapi.yaml" +} \ No newline at end of file From 3b2454b6910dc3a66f6e8a6311ce1714dad14ab0 Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:03:41 +0100 Subject: [PATCH 4/8] docs(configuration): use explicit placeholder for jwt_secret --- docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index 26805ea..0f50ad4 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -24,7 +24,7 @@ auth: enabled: true api_keys: - "your-secure-api-key-here" - jwt_secret: "generate-a-secure-random-string-here" + jwt_secret: "REPLACE_WITH_SECURE_RANDOM_STRING" # generate via: openssl rand -base64 32 nginx: container_name: nginx From f3d0460ca0c13142a8882588e36a200dd1b47f8f Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:04:01 +0100 Subject: [PATCH 5/8] docs: rename PLUGIN_ARCHITECTURE.md to plugin-architecture.md for consistency --- docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs.json b/docs.json index 2d0a2f9..eb8cb92 100644 --- a/docs.json +++ b/docs.json @@ -30,7 +30,7 @@ }, { "title": "Plugin Architecture", - "path": "docs/PLUGIN_ARCHITECTURE.md" + "path": "docs/plugin-architecture.md" }, { "title": "Security", From 2a89c5b1e941da125f11f017ef622b496092cc1c Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:08:41 +0100 Subject: [PATCH 6/8] docs(installation): use dedicated user, add dir creation and config copy steps --- docs/installation.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/installation.md b/docs/installation.md index f84e353..a1b69a4 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -48,6 +48,15 @@ sudo mv flatrun-agent /usr/local/bin/ sudo chmod +x /usr/local/bin/flatrun-agent ``` +Prepare the working directory and a dedicated user: + +```bash +sudo mkdir -p /opt/flatrun +sudo useradd -r -s /usr/sbin/nologin -G docker flatrun +sudo chown flatrun:flatrun /opt/flatrun +sudo cp config.yml /opt/flatrun/config.yml +``` + Create `/etc/systemd/system/flatrun-agent.service`: ```ini @@ -58,9 +67,11 @@ Requires=docker.service [Service] Type=simple -User=root +User=flatrun +Group=docker WorkingDirectory=/opt/flatrun ExecStart=/usr/local/bin/flatrun-agent --config /opt/flatrun/config.yml +# Make sure config.yml is copied to /opt/flatrun/ first Restart=always RestartSec=10 StandardOutput=journal From 9540c22d28a39b930fb646bf76d8ce9d3a9d5571 Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:10:13 +0100 Subject: [PATCH 7/8] docs: remove old PLUGIN_ARCHITECTURE.md --- docs/PLUGIN_ARCHITECTURE.md | 412 ------------------------------------ 1 file changed, 412 deletions(-) delete mode 100644 docs/PLUGIN_ARCHITECTURE.md diff --git a/docs/PLUGIN_ARCHITECTURE.md b/docs/PLUGIN_ARCHITECTURE.md deleted file mode 100644 index 140fc63..0000000 --- a/docs/PLUGIN_ARCHITECTURE.md +++ /dev/null @@ -1,412 +0,0 @@ -# Flatrun Plugin Architecture - -## Overview - -Flatrun supports a plugin architecture that allows extending the platform with custom functionality. Plugins can add new deployment types, dashboard widgets, API endpoints, and automated workflows. - -## Core Concepts - -### Agent as Source of Truth -The Go agent serves as the single source of truth. All plugins register with the agent, which: -- Maintains plugin registry -- Exposes plugin metadata to the UI -- Manages plugin lifecycle -- Provides plugin APIs - -### Plugin Types - -1. **Deployment Plugins** - Custom app deployment templates (WordPress, Laravel, etc.) -2. **Widget Plugins** - Dashboard components showing custom metrics/controls -3. **Service Plugins** - Background services (monitoring, backups, etc.) -4. **Integration Plugins** - External service integrations (DNS providers, storage, etc.) - -## Plugin Structure - -``` -plugins/ - wordpress/ - plugin.yaml # Plugin manifest - templates/ - docker-compose.yml # Deployment template - nginx.conf # Nginx configuration - hooks/ - pre_install.sh # Pre-installation hook - post_install.sh # Post-installation hook - ui/ - widget.json # Widget configuration - icon.svg # Plugin icon -``` - -## Plugin Manifest (plugin.yaml) - -```yaml -name: wordpress -version: 1.0.0 -display_name: WordPress -description: Managed WordPress hosting with automatic updates -author: Flatrun -license: proprietary - -# Plugin capabilities -type: deployment -category: cms - -# Dependencies -requires: - - mysql - - nginx - -# Configuration schema -config_schema: - type: object - properties: - site_title: - type: string - title: Site Title - required: true - admin_email: - type: string - format: email - title: Admin Email - required: true - php_version: - type: string - enum: ["8.1", "8.2", "8.3"] - default: "8.2" - title: PHP Version - enable_cache: - type: boolean - default: true - title: Enable Redis Cache - auto_updates: - type: boolean - default: true - title: Automatic Updates - -# Dashboard widget -widget: - enabled: true - position: main - size: medium - refresh_interval: 60 - actions: - - name: clear_cache - label: Clear Cache - icon: pi-trash - - name: update_core - label: Update WordPress - icon: pi-refresh - -# API endpoints provided by plugin -api: - - path: /plugins/wordpress/:id/cache - method: DELETE - handler: clear_cache - - path: /plugins/wordpress/:id/update - method: POST - handler: update_wordpress - -# Hooks -hooks: - pre_install: hooks/pre_install.sh - post_install: hooks/post_install.sh - pre_uninstall: hooks/pre_uninstall.sh - health_check: hooks/health_check.sh - -# Resource requirements -resources: - min_memory: 512M - min_cpu: 0.5 - recommended_memory: 2G - recommended_cpu: 2 - -# Networks -networks: - - web - - database -``` - -## Agent Plugin System - -### Plugin Interface (Go) - -```go -package plugins - -type Plugin interface { - // Metadata - Name() string - Version() string - Type() PluginType - - // Lifecycle - Initialize(config map[string]interface{}) error - Start() error - Stop() error - - // Capabilities - GetCapabilities() []Capability - - // API - RegisterRoutes(router *gin.RouterGroup) error - - // Widget - GetWidgetData() (interface{}, error) -} - -type DeploymentPlugin interface { - Plugin - - // Deployment operations - CreateDeployment(name string, config map[string]interface{}) error - ConfigureDeployment(name string, config map[string]interface{}) error - GetDeploymentStatus(name string) (*DeploymentStatus, error) - - // Templates - GetDockerCompose(config map[string]interface{}) (string, error) - GetNginxConfig(config map[string]interface{}) (string, error) -} - -type PluginType string - -const ( - TypeDeployment PluginType = "deployment" - TypeWidget PluginType = "widget" - TypeService PluginType = "service" - TypeIntegration PluginType = "integration" -) - -type Capability string - -const ( - CapAutoSSL Capability = "auto_ssl" - CapAutoBackup Capability = "auto_backup" - CapAutoUpdate Capability = "auto_update" - CapMonitoring Capability = "monitoring" - CapScaling Capability = "scaling" -) -``` - -### Plugin Registry - -```go -package plugins - -type Registry struct { - plugins map[string]Plugin - mu sync.RWMutex -} - -func (r *Registry) Register(plugin Plugin) error -func (r *Registry) Unregister(name string) error -func (r *Registry) Get(name string) (Plugin, bool) -func (r *Registry) List() []PluginInfo -func (r *Registry) LoadFromDisk(path string) error -``` - -## UI Plugin Integration - -### Plugin Registry API - -``` -GET /api/plugins -Response: -{ - "plugins": [ - { - "name": "wordpress", - "display_name": "WordPress", - "version": "1.0.0", - "type": "deployment", - "enabled": true, - "widget": { - "enabled": true, - "position": "main", - "size": "medium" - }, - "config_schema": { ... } - } - ] -} -``` - -### Widget Injection - -The UI fetches widget configurations from the agent and dynamically renders them: - -```vue - - -``` - -### Shared Component Library - -Plugins use pre-built components to maintain UI consistency: - -- `FlatCard` - Standard card container -- `FlatButton` - Styled buttons -- `FlatInput` - Form inputs -- `FlatTable` - Data tables -- `FlatModal` - Modal dialogs -- `FlatStatus` - Status indicators -- `FlatMetric` - Metric displays -- `FlatChart` - Charts and graphs - -## Example: WordPress Plugin - -### Deployment Template - -```yaml -# templates/docker-compose.yml -services: - wordpress: - image: wordpress:php${PHP_VERSION}-apache - container_name: ${NAME}_wordpress - environment: - WORDPRESS_DB_HOST: ${NAME}_db - WORDPRESS_DB_NAME: wordpress - WORDPRESS_DB_USER: wordpress - WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} - volumes: - - ./wordpress:/var/www/html - networks: - - web - - ${NAME}_internal - depends_on: - - db - restart: unless-stopped - - db: - image: mysql:8.0 - container_name: ${NAME}_db - environment: - MYSQL_DATABASE: wordpress - MYSQL_USER: wordpress - MYSQL_PASSWORD: ${DB_PASSWORD} - MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - volumes: - - ./mysql:/var/lib/mysql - networks: - - ${NAME}_internal - restart: unless-stopped - - redis: - image: redis:alpine - container_name: ${NAME}_redis - volumes: - - ./redis:/data - networks: - - ${NAME}_internal - restart: unless-stopped - -networks: - web: - external: true - ${NAME}_internal: - driver: bridge -``` - -### Widget Data - -```json -{ - "type": "wordpress", - "metrics": { - "posts": 125, - "pages": 12, - "users": 5, - "plugins": 18, - "themes": 3, - "updates_available": 4 - }, - "health": { - "status": "healthy", - "php_version": "8.2.10", - "wp_version": "6.4.2", - "disk_usage": "2.1GB", - "database_size": "156MB" - }, - "actions": [ - { - "id": "clear_cache", - "label": "Clear Cache", - "enabled": true - }, - { - "id": "update_core", - "label": "Update WordPress", - "enabled": true, - "badge": "4 updates" - } - ] -} -``` - -## Example: Laravel Plugin - -### Configuration Schema - -```yaml -config_schema: - type: object - properties: - app_name: - type: string - title: Application Name - environment: - type: string - enum: ["local", "staging", "production"] - default: "production" - php_version: - type: string - enum: ["8.1", "8.2", "8.3"] - default: "8.2" - queue_driver: - type: string - enum: ["sync", "redis", "database"] - default: "redis" - cache_driver: - type: string - enum: ["file", "redis", "memcached"] - default: "redis" - enable_horizon: - type: boolean - default: true - enable_scheduler: - type: boolean - default: true -``` - -## Security Considerations - -1. **Sandboxing**: Plugins run in isolated environments -2. **Permissions**: Fine-grained permission system for plugin actions -3. **Validation**: All plugin configs validated against schema -4. **Signing**: Plugins can be cryptographically signed -5. **Audit**: All plugin actions are logged - -## Installation Flow - -1. User selects plugin from marketplace or uploads -2. Agent validates plugin manifest -3. Dependencies checked and resolved -4. Plugin files copied to plugins directory -5. Agent loads plugin and registers capabilities -6. UI receives updated plugin registry -7. Dashboard displays new widgets/options - -## Future Enhancements - -- Plugin marketplace (hosted/self-hosted) -- Hot-reload without agent restart -- Plugin versioning and migrations -- Plugin dependencies and conflicts resolution -- Multi-tenant plugin permissions -- Plugin analytics and telemetry From 7529fc7a1aa1cada3f6e4a44434682f89221ecb7 Mon Sep 17 00:00:00 2001 From: Lantum Brendan <126294696+Lantum-Brendan@users.noreply.github.com> Date: Mon, 29 Jun 2026 20:11:19 +0100 Subject: [PATCH 8/8] docs: add plugin-architecture.md (renamed from PLUGIN_ARCHITECTURE.md) --- docs/plugin-architecture.md | 412 ++++++++++++++++++++++++++++++++++++ 1 file changed, 412 insertions(+) create mode 100644 docs/plugin-architecture.md diff --git a/docs/plugin-architecture.md b/docs/plugin-architecture.md new file mode 100644 index 0000000..140fc63 --- /dev/null +++ b/docs/plugin-architecture.md @@ -0,0 +1,412 @@ +# Flatrun Plugin Architecture + +## Overview + +Flatrun supports a plugin architecture that allows extending the platform with custom functionality. Plugins can add new deployment types, dashboard widgets, API endpoints, and automated workflows. + +## Core Concepts + +### Agent as Source of Truth +The Go agent serves as the single source of truth. All plugins register with the agent, which: +- Maintains plugin registry +- Exposes plugin metadata to the UI +- Manages plugin lifecycle +- Provides plugin APIs + +### Plugin Types + +1. **Deployment Plugins** - Custom app deployment templates (WordPress, Laravel, etc.) +2. **Widget Plugins** - Dashboard components showing custom metrics/controls +3. **Service Plugins** - Background services (monitoring, backups, etc.) +4. **Integration Plugins** - External service integrations (DNS providers, storage, etc.) + +## Plugin Structure + +``` +plugins/ + wordpress/ + plugin.yaml # Plugin manifest + templates/ + docker-compose.yml # Deployment template + nginx.conf # Nginx configuration + hooks/ + pre_install.sh # Pre-installation hook + post_install.sh # Post-installation hook + ui/ + widget.json # Widget configuration + icon.svg # Plugin icon +``` + +## Plugin Manifest (plugin.yaml) + +```yaml +name: wordpress +version: 1.0.0 +display_name: WordPress +description: Managed WordPress hosting with automatic updates +author: Flatrun +license: proprietary + +# Plugin capabilities +type: deployment +category: cms + +# Dependencies +requires: + - mysql + - nginx + +# Configuration schema +config_schema: + type: object + properties: + site_title: + type: string + title: Site Title + required: true + admin_email: + type: string + format: email + title: Admin Email + required: true + php_version: + type: string + enum: ["8.1", "8.2", "8.3"] + default: "8.2" + title: PHP Version + enable_cache: + type: boolean + default: true + title: Enable Redis Cache + auto_updates: + type: boolean + default: true + title: Automatic Updates + +# Dashboard widget +widget: + enabled: true + position: main + size: medium + refresh_interval: 60 + actions: + - name: clear_cache + label: Clear Cache + icon: pi-trash + - name: update_core + label: Update WordPress + icon: pi-refresh + +# API endpoints provided by plugin +api: + - path: /plugins/wordpress/:id/cache + method: DELETE + handler: clear_cache + - path: /plugins/wordpress/:id/update + method: POST + handler: update_wordpress + +# Hooks +hooks: + pre_install: hooks/pre_install.sh + post_install: hooks/post_install.sh + pre_uninstall: hooks/pre_uninstall.sh + health_check: hooks/health_check.sh + +# Resource requirements +resources: + min_memory: 512M + min_cpu: 0.5 + recommended_memory: 2G + recommended_cpu: 2 + +# Networks +networks: + - web + - database +``` + +## Agent Plugin System + +### Plugin Interface (Go) + +```go +package plugins + +type Plugin interface { + // Metadata + Name() string + Version() string + Type() PluginType + + // Lifecycle + Initialize(config map[string]interface{}) error + Start() error + Stop() error + + // Capabilities + GetCapabilities() []Capability + + // API + RegisterRoutes(router *gin.RouterGroup) error + + // Widget + GetWidgetData() (interface{}, error) +} + +type DeploymentPlugin interface { + Plugin + + // Deployment operations + CreateDeployment(name string, config map[string]interface{}) error + ConfigureDeployment(name string, config map[string]interface{}) error + GetDeploymentStatus(name string) (*DeploymentStatus, error) + + // Templates + GetDockerCompose(config map[string]interface{}) (string, error) + GetNginxConfig(config map[string]interface{}) (string, error) +} + +type PluginType string + +const ( + TypeDeployment PluginType = "deployment" + TypeWidget PluginType = "widget" + TypeService PluginType = "service" + TypeIntegration PluginType = "integration" +) + +type Capability string + +const ( + CapAutoSSL Capability = "auto_ssl" + CapAutoBackup Capability = "auto_backup" + CapAutoUpdate Capability = "auto_update" + CapMonitoring Capability = "monitoring" + CapScaling Capability = "scaling" +) +``` + +### Plugin Registry + +```go +package plugins + +type Registry struct { + plugins map[string]Plugin + mu sync.RWMutex +} + +func (r *Registry) Register(plugin Plugin) error +func (r *Registry) Unregister(name string) error +func (r *Registry) Get(name string) (Plugin, bool) +func (r *Registry) List() []PluginInfo +func (r *Registry) LoadFromDisk(path string) error +``` + +## UI Plugin Integration + +### Plugin Registry API + +``` +GET /api/plugins +Response: +{ + "plugins": [ + { + "name": "wordpress", + "display_name": "WordPress", + "version": "1.0.0", + "type": "deployment", + "enabled": true, + "widget": { + "enabled": true, + "position": "main", + "size": "medium" + }, + "config_schema": { ... } + } + ] +} +``` + +### Widget Injection + +The UI fetches widget configurations from the agent and dynamically renders them: + +```vue + + +``` + +### Shared Component Library + +Plugins use pre-built components to maintain UI consistency: + +- `FlatCard` - Standard card container +- `FlatButton` - Styled buttons +- `FlatInput` - Form inputs +- `FlatTable` - Data tables +- `FlatModal` - Modal dialogs +- `FlatStatus` - Status indicators +- `FlatMetric` - Metric displays +- `FlatChart` - Charts and graphs + +## Example: WordPress Plugin + +### Deployment Template + +```yaml +# templates/docker-compose.yml +services: + wordpress: + image: wordpress:php${PHP_VERSION}-apache + container_name: ${NAME}_wordpress + environment: + WORDPRESS_DB_HOST: ${NAME}_db + WORDPRESS_DB_NAME: wordpress + WORDPRESS_DB_USER: wordpress + WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} + volumes: + - ./wordpress:/var/www/html + networks: + - web + - ${NAME}_internal + depends_on: + - db + restart: unless-stopped + + db: + image: mysql:8.0 + container_name: ${NAME}_db + environment: + MYSQL_DATABASE: wordpress + MYSQL_USER: wordpress + MYSQL_PASSWORD: ${DB_PASSWORD} + MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} + volumes: + - ./mysql:/var/lib/mysql + networks: + - ${NAME}_internal + restart: unless-stopped + + redis: + image: redis:alpine + container_name: ${NAME}_redis + volumes: + - ./redis:/data + networks: + - ${NAME}_internal + restart: unless-stopped + +networks: + web: + external: true + ${NAME}_internal: + driver: bridge +``` + +### Widget Data + +```json +{ + "type": "wordpress", + "metrics": { + "posts": 125, + "pages": 12, + "users": 5, + "plugins": 18, + "themes": 3, + "updates_available": 4 + }, + "health": { + "status": "healthy", + "php_version": "8.2.10", + "wp_version": "6.4.2", + "disk_usage": "2.1GB", + "database_size": "156MB" + }, + "actions": [ + { + "id": "clear_cache", + "label": "Clear Cache", + "enabled": true + }, + { + "id": "update_core", + "label": "Update WordPress", + "enabled": true, + "badge": "4 updates" + } + ] +} +``` + +## Example: Laravel Plugin + +### Configuration Schema + +```yaml +config_schema: + type: object + properties: + app_name: + type: string + title: Application Name + environment: + type: string + enum: ["local", "staging", "production"] + default: "production" + php_version: + type: string + enum: ["8.1", "8.2", "8.3"] + default: "8.2" + queue_driver: + type: string + enum: ["sync", "redis", "database"] + default: "redis" + cache_driver: + type: string + enum: ["file", "redis", "memcached"] + default: "redis" + enable_horizon: + type: boolean + default: true + enable_scheduler: + type: boolean + default: true +``` + +## Security Considerations + +1. **Sandboxing**: Plugins run in isolated environments +2. **Permissions**: Fine-grained permission system for plugin actions +3. **Validation**: All plugin configs validated against schema +4. **Signing**: Plugins can be cryptographically signed +5. **Audit**: All plugin actions are logged + +## Installation Flow + +1. User selects plugin from marketplace or uploads +2. Agent validates plugin manifest +3. Dependencies checked and resolved +4. Plugin files copied to plugins directory +5. Agent loads plugin and registers capabilities +6. UI receives updated plugin registry +7. Dashboard displays new widgets/options + +## Future Enhancements + +- Plugin marketplace (hosted/self-hosted) +- Hot-reload without agent restart +- Plugin versioning and migrations +- Plugin dependencies and conflicts resolution +- Multi-tenant plugin permissions +- Plugin analytics and telemetry