{ "openapi": "3.1.0", "info": { "title": "Dokploy API", "description": "Complete API documentation for Dokploy - Deploy applications, manage databases, and orchestrate your infrastructure. This API allows you to programmatically manage all aspects of your Dokploy instance.", "version": "1.0.0", "contact": { "name": "Dokploy Team", "url": "https://dokploy.com" }, "license": { "name": "Apache 2.0", "url": "https://github.com/dokploy/dokploy/blob/canary/LICENSE" } }, "servers": [ { "url": "https://your-dokploy-instance.com/api" } ], "tags": [ { "name": "admin" }, { "name": "docker" }, { "name": "compose" }, { "name": "registry" }, { "name": "cluster" }, { "name": "user" }, { "name": "domain" }, { "name": "destination" }, { "name": "backup" }, { "name": "deployment" }, { "name": "mounts" }, { "name": "certificates" }, { "name": "settings" }, { "name": "security" }, { "name": "redirects" }, { "name": "port" }, { "name": "project" }, { "name": "application" }, { "name": "mysql" }, { "name": "postgres" }, { "name": "redis" }, { "name": "mongo" }, { "name": "mariadb" }, { "name": "sshRouter" }, { "name": "gitProvider" }, { "name": "bitbucket" }, { "name": "github" }, { "name": "gitlab" }, { "name": "gitea" }, { "name": "server" }, { "name": "swarm" }, { "name": "ai" }, { "name": "organization" }, { "name": "schedule" }, { "name": "rollback" }, { "name": "volumeBackups" }, { "name": "environment" } ], "externalDocs": { "description": "Full documentation", "url": "https://docs.dokploy.com" }, "paths": { "/admin.setupMonitoring": { "post": { "operationId": "admin-setupMonitoring", "summary": "Update web server monitoring settings", "description": "Update the monitoring configuration for the web server including refresh rates, thresholds, and container services. Restarts the monitoring system and returns the updated settings. Disabled on cloud.", "tags": [ "admin" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "metricsConfig": { "type": "object", "properties": { "server": { "type": "object", "properties": { "refreshRate": { "type": "number", "minimum": 2 }, "port": { "type": "number", "minimum": 1 }, "token": { "type": "string" }, "urlCallback": { "type": "string", "format": "uri" }, "retentionDays": { "type": "number", "minimum": 1 }, "cronJob": { "type": "string", "minLength": 1 }, "thresholds": { "type": "object", "properties": { "cpu": { "type": "number", "minimum": 0 }, "memory": { "type": "number", "minimum": 0 } }, "required": [ "cpu", "memory" ] } }, "required": [ "refreshRate", "port", "token", "urlCallback", "retentionDays", "cronJob", "thresholds" ] }, "containers": { "type": "object", "properties": { "refreshRate": { "type": "number", "minimum": 2 }, "services": { "type": "object", "properties": { "include": { "type": "array", "items": { "type": "string" } }, "exclude": { "type": "array", "items": { "type": "string" } } } } }, "required": [ "refreshRate", "services" ] } }, "required": [ "server", "containers" ] } }, "required": [ "metricsConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.create": { "post": { "operationId": "application-create", "summary": "Create an application", "description": "Creates a new application in the specified project environment. Supports GitHub, GitLab, Bitbucket, Git, Docker image, and drop sources.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environmentId": { "type": "string" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "environmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.one": { "get": { "operationId": "application-one", "summary": "Get an application", "description": "Retrieves detailed information about an application by its ID, including git provider access status and deployment configuration.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.reload": { "post": { "operationId": "application-reload", "summary": "Reload an application", "description": "Restarts the Docker container for the application by mechanizing it. Resets the application status to idle, then to done on success or error on failure.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "applicationId": { "type": "string" } }, "required": [ "appName", "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.delete": { "post": { "operationId": "application-delete", "summary": "Delete an application", "description": "Permanently deletes an application and cleans up all associated resources including Docker services, Traefik configuration, deployments, middlewares, and source code.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.stop": { "post": { "operationId": "application-stop", "summary": "Stop an application", "description": "Stops the running Docker service for the application and sets its status to idle.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.start": { "post": { "operationId": "application-start", "summary": "Start an application", "description": "Starts the Docker service for the application and sets its status to done.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.redeploy": { "post": { "operationId": "application-redeploy", "summary": "Redeploy an application", "description": "Triggers a rebuild and redeployment of the application. Queues a deployment job or executes it directly for cloud servers.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 }, "title": { "type": "string" }, "description": { "type": "string" } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveEnvironment": { "post": { "operationId": "application-saveEnvironment", "summary": "Save environment variables", "description": "Updates the environment variables, build arguments, and build secrets for an application.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildArgs": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildSecrets": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createEnvFile": { "type": "boolean" } }, "required": [ "applicationId", "env", "buildArgs", "buildSecrets", "createEnvFile" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveBuildType": { "post": { "operationId": "application-saveBuildType", "summary": "Save build type configuration", "description": "Updates the build type and related settings for an application, including Dockerfile path, build context, publish directory, and build stage.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "buildType": { "type": "string", "enum": [ "dockerfile", "heroku_buildpacks", "paketo_buildpacks", "nixpacks", "static", "railpack" ] }, "dockerfile": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dockerContextPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dockerBuildStage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "herokuVersion": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "railpackVersion": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "publishDirectory": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "isStaticSpa": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] } }, "required": [ "applicationId", "buildType", "dockerfile", "dockerContextPath", "dockerBuildStage", "herokuVersion", "railpackVersion" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveGithubProvider": { "post": { "operationId": "application-saveGithubProvider", "summary": "Save GitHub provider", "description": "Configures the application to use a GitHub repository as its source, setting the repository, branch, owner, and build path.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "repository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "branch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "owner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "githubId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "triggerType": { "default": "push", "type": "string", "enum": [ "push", "tag" ] }, "enableSubmodules": { "type": "boolean" }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] } }, "required": [ "applicationId", "repository", "branch", "owner", "buildPath", "githubId", "triggerType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveGitlabProvider": { "post": { "operationId": "application-saveGitlabProvider", "summary": "Save GitLab provider", "description": "Configures the application to use a GitLab repository as its source, setting the repository, branch, owner, build path, and project ID.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "gitlabBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabProjectId": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "gitlabPathNamespace": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enableSubmodules": { "type": "boolean" }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] } }, "required": [ "applicationId", "gitlabBranch", "gitlabBuildPath", "gitlabOwner", "gitlabRepository", "gitlabId", "gitlabProjectId", "gitlabPathNamespace" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveBitbucketProvider": { "post": { "operationId": "application-saveBitbucketProvider", "summary": "Save Bitbucket provider", "description": "Configures the application to use a Bitbucket repository as its source, setting the repository, branch, owner, and build path.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "bitbucketBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketRepositorySlug": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applicationId": { "type": "string" }, "enableSubmodules": { "type": "boolean" }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] } }, "required": [ "bitbucketBranch", "bitbucketBuildPath", "bitbucketOwner", "bitbucketRepository", "bitbucketRepositorySlug", "bitbucketId", "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveGiteaProvider": { "post": { "operationId": "application-saveGiteaProvider", "summary": "Save Gitea provider", "description": "Configures the application to use a Gitea repository as its source, setting the repository, branch, owner, and build path.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "giteaBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enableSubmodules": { "type": "boolean" }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] } }, "required": [ "applicationId", "giteaBranch", "giteaBuildPath", "giteaOwner", "giteaRepository", "giteaId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveDockerProvider": { "post": { "operationId": "application-saveDockerProvider", "summary": "Save Docker provider", "description": "Configures the application to use a Docker image as its source, setting the image name, registry URL, and optional credentials.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "dockerImage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applicationId": { "type": "string" }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "registryUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "dockerImage", "applicationId", "username", "password", "registryUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.saveGitProvider": { "post": { "operationId": "application-saveGitProvider", "summary": "Save Git provider", "description": "Configures the application to use a custom Git repository URL as its source, with optional SSH key authentication.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "customGitBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applicationId": { "type": "string" }, "customGitBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "enableSubmodules": { "type": "boolean" }, "customGitSSHKeyId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "customGitBranch", "applicationId", "customGitBuildPath", "customGitUrl", "watchPaths" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.disconnectGitProvider": { "post": { "operationId": "application-disconnectGitProvider", "summary": "Disconnect git provider", "description": "Removes all git provider configuration from the application, resetting source type to default and clearing repository, branch, and owner fields for all providers.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.markRunning": { "post": { "operationId": "application-markRunning", "summary": "Mark application as running", "description": "Sets the application status to running. Used to indicate that a deployment is in progress.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.update": { "post": { "operationId": "application-update", "summary": "Update an application", "description": "Updates the general configuration of an application such as name, description, memory limits, CPU limits, and other settings.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "previewEnv": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "previewBuildArgs": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "previewBuildSecrets": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "previewLabels": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "previewWildcard": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "previewPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "previewHttps": { "type": "boolean" }, "previewPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "previewCertificateType": { "type": "string", "enum": [ "letsencrypt", "none", "custom" ] }, "previewCustomCertResolver": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "previewLimit": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "isPreviewDeploymentsActive": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "previewRequireCollaboratorPermissions": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "rollbackActive": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "buildArgs": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildSecrets": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "subtitle": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "args": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "icon": { "anyOf": [ { "anyOf": [ { "type": "string", "maxLength": 2097152 }, { "type": "null" } ] }, { "type": "null" } ] }, "refreshToken": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceType": { "type": "string", "enum": [ "github", "docker", "git", "gitlab", "bitbucket", "gitea", "drop" ] }, "cleanCache": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "repository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "owner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "branch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "triggerType": { "anyOf": [ { "type": "string", "enum": [ "push", "tag" ] }, { "type": "null" } ] }, "autoDeploy": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "gitlabProjectId": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "gitlabRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabPathNamespace": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketRepositorySlug": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "username": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dockerImage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "registryUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitSSHKeyId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enableSubmodules": { "type": "boolean" }, "dockerfile": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dockerContextPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dockerBuildStage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dropBuildPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "ulimitsSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Name": { "type": "string", "minLength": 1 }, "Soft": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 }, "Hard": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 } }, "required": [ "Name", "Soft", "Hard" ], "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "buildType": { "type": "string", "enum": [ "dockerfile", "heroku_buildpacks", "paketo_buildpacks", "nixpacks", "static", "railpack" ] }, "railpackVersion": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "herokuVersion": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "publishDirectory": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "isStaticSpa": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "createEnvFile": { "type": "boolean" }, "createdAt": { "type": "string" }, "registryId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "rollbackRegistryId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environmentId": { "type": "string" }, "githubId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildServerId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "buildRegistryId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.refreshToken": { "post": { "operationId": "application-refreshToken", "summary": "Refresh deploy token", "description": "Regenerates the webhook refresh token for the application, invalidating the previous token used for triggering deployments.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.deploy": { "post": { "operationId": "application-deploy", "summary": "Deploy an application", "description": "Triggers a new deployment for the application. Queues a deployment job or executes it directly for cloud servers.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 }, "title": { "type": "string" }, "description": { "type": "string" } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.cleanQueues": { "post": { "operationId": "application-cleanQueues", "summary": "Clean deployment queues", "description": "Removes all pending deployment jobs from the queue for the specified application.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.clearDeployments": { "post": { "operationId": "application-clearDeployments", "summary": "Clear old deployments", "description": "Removes old deployment logs and artifacts for the application to free up disk space.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.killBuild": { "post": { "operationId": "application-killBuild", "summary": "Kill active build", "description": "Forcefully terminates the currently running Docker build process for the application.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.readTraefikConfig": { "get": { "operationId": "application-readTraefikConfig", "summary": "Read Traefik configuration", "description": "Reads the current Traefik reverse proxy configuration file for the application. Supports both local and remote server configurations.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.dropDeployment": { "post": { "operationId": "application-dropDeployment", "summary": "Deploy from zip upload", "description": "Deploys an application from an uploaded zip file. Unzips the file into the application directory and triggers a deployment.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "zip": { "type": "string", "format": "binary" }, "dropBuildPath": { "type": "string" } }, "required": [ "applicationId", "zip" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.updateTraefikConfig": { "post": { "operationId": "application-updateTraefikConfig", "summary": "Update Traefik configuration", "description": "Writes a new Traefik reverse proxy configuration for the application. Supports both local and remote server configurations.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "traefikConfig": { "type": "string" } }, "required": [ "applicationId", "traefikConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.readAppMonitoring": { "get": { "operationId": "application-readAppMonitoring", "summary": "Read application monitoring stats", "description": "Retrieves CPU and memory monitoring statistics for the application. Only available in self-hosted mode.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "appName", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.move": { "post": { "operationId": "application-move", "summary": "Move application to another environment", "description": "Moves an application to a different environment within the same project or to another project's environment.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "applicationId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.cancelDeployment": { "post": { "operationId": "application-cancelDeployment", "summary": "Cancel a deployment", "description": "Cancels an in-progress deployment for the application and resets its status to idle. Only available in cloud version.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.search": { "get": { "operationId": "application-search", "summary": "Search applications", "description": "Searches applications by name, appName, description, repository, owner, or Docker image with pagination. Respects service-level access control.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "repository", "schema": { "type": "string" } }, { "in": "query", "name": "owner", "schema": { "type": "string" } }, { "in": "query", "name": "dockerImage", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/application.readLogs": { "get": { "operationId": "application-readLogs", "summary": "Read application logs", "description": "Retrieves Docker container logs for the application with configurable tail length, time range, and optional text search filtering.", "tags": [ "application" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.create": { "post": { "operationId": "backup-create", "summary": "Create a backup", "description": "Creates a new backup configuration for a database or compose service. If enabled, automatically schedules the backup according to the provided cron expression.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "schedule": { "type": "string" }, "enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "prefix": { "type": "string", "minLength": 1 }, "destinationId": { "type": "string" }, "keepLatestCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "database": { "type": "string", "minLength": 1 }, "mariadbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mysqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "postgresId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mongoId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "libsqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseType": { "type": "string", "enum": [ "postgres", "mariadb", "mysql", "mongo", "web-server", "libsql" ] }, "userId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "backupType": { "type": "string", "enum": [ "database", "compose" ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ {}, { "type": "null" } ] } }, "required": [ "schedule", "prefix", "destinationId", "database", "databaseType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.one": { "get": { "operationId": "backup-one", "summary": "Get a backup", "description": "Returns the details of a specific backup configuration by its ID.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "backupId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.update": { "post": { "operationId": "backup-update", "summary": "Update a backup", "description": "Updates an existing backup configuration. Reschedules or removes the backup job depending on the enabled state.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "schedule": { "type": "string" }, "enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "prefix": { "type": "string", "minLength": 1 }, "backupId": { "type": "string" }, "destinationId": { "type": "string" }, "database": { "type": "string", "minLength": 1 }, "keepLatestCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ {}, { "type": "null" } ] }, "databaseType": { "type": "string", "enum": [ "postgres", "mariadb", "mysql", "mongo", "web-server", "libsql" ] } }, "required": [ "schedule", "enabled", "prefix", "backupId", "destinationId", "database", "keepLatestCount", "serviceName", "metadata", "databaseType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.remove": { "post": { "operationId": "backup-remove", "summary": "Delete a backup", "description": "Permanently removes a backup configuration and unschedules any associated backup job.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string" } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupPostgres": { "post": { "operationId": "backup-manualBackupPostgres", "summary": "Run a PostgreSQL backup manually", "description": "Immediately executes a PostgreSQL backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupMySql": { "post": { "operationId": "backup-manualBackupMySql", "summary": "Run a MySQL backup manually", "description": "Immediately executes a MySQL backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupMariadb": { "post": { "operationId": "backup-manualBackupMariadb", "summary": "Run a MariaDB backup manually", "description": "Immediately executes a MariaDB backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupCompose": { "post": { "operationId": "backup-manualBackupCompose", "summary": "Run a Compose backup manually", "description": "Immediately executes a Compose service backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupMongo": { "post": { "operationId": "backup-manualBackupMongo", "summary": "Run a MongoDB backup manually", "description": "Immediately executes a MongoDB backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupLibsql": { "post": { "operationId": "backup-manualBackupLibsql", "summary": "Run a LibSQL backup manually", "description": "Immediately executes a LibSQL backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.manualBackupWebServer": { "post": { "operationId": "backup-manualBackupWebServer", "summary": "Run a web server backup manually", "description": "Immediately executes a web server backup using the specified backup configuration. Cleans up old backups according to retention settings.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "backupId": { "type": "string", "minLength": 1 } }, "required": [ "backupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/backup.listBackupFiles": { "get": { "operationId": "backup-listBackupFiles", "summary": "List backup files in S3", "description": "Lists backup files stored in the S3 destination bucket. Supports searching by path prefix and returns up to 100 results.", "tags": [ "backup" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "destinationId", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "search", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.create": { "post": { "operationId": "bitbucket-create", "summary": "Create Bitbucket provider", "description": "Creates a new Bitbucket provider configuration linked to the active organization. Requires gitProviders create permission.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "bitbucketId": { "type": "string" }, "bitbucketUsername": { "type": "string" }, "bitbucketEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "appPassword": { "type": "string" }, "apiToken": { "type": "string" }, "bitbucketWorkspaceName": { "type": "string" }, "gitProviderId": { "type": "string" }, "authId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 } }, "required": [ "authId", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.one": { "get": { "operationId": "bitbucket-one", "summary": "Get Bitbucket provider", "description": "Returns a single Bitbucket provider configuration by its ID.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "bitbucketId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.bitbucketProviders": { "get": { "operationId": "bitbucket-bitbucketProviders", "summary": "List Bitbucket providers", "description": "Returns all Bitbucket providers accessible to the current user within the active organization.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.getBitbucketRepositories": { "get": { "operationId": "bitbucket-getBitbucketRepositories", "summary": "List Bitbucket repositories", "description": "Fetches the list of repositories accessible by the Bitbucket provider. Calls the Bitbucket API using the provider's credentials.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "bitbucketId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.getBitbucketBranches": { "get": { "operationId": "bitbucket-getBitbucketBranches", "summary": "List Bitbucket branches", "description": "Fetches the list of branches for a specific Bitbucket repository. Calls the Bitbucket API using the provider's credentials.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "owner", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "repo", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "bitbucketId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.testConnection": { "post": { "operationId": "bitbucket-testConnection", "summary": "Test Bitbucket connection", "description": "Tests the connection to a Bitbucket provider by attempting to fetch its repositories. Returns the number of repositories found or throws an error on failure.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "bitbucketId": { "type": "string", "minLength": 1 }, "bitbucketUsername": { "type": "string" }, "bitbucketEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "workspaceName": { "type": "string" }, "apiToken": { "type": "string" }, "appPassword": { "type": "string" } }, "required": [ "bitbucketId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/bitbucket.update": { "post": { "operationId": "bitbucket-update", "summary": "Update Bitbucket provider", "description": "Updates a Bitbucket provider configuration. Requires gitProviders create permission.", "tags": [ "bitbucket" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "bitbucketId": { "type": "string", "minLength": 1 }, "bitbucketUsername": { "type": "string" }, "bitbucketEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "appPassword": { "type": "string" }, "apiToken": { "type": "string" }, "bitbucketWorkspaceName": { "type": "string" }, "gitProviderId": { "type": "string" }, "name": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "bitbucketId", "gitProviderId", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/certificates.create": { "post": { "operationId": "certificates-create", "summary": "Create a certificate", "description": "Creates a new SSL/TLS certificate. In cloud mode, a server must be specified. Logs an audit entry upon creation.", "tags": [ "certificates" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "certificateId": { "type": "string" }, "name": { "type": "string", "minLength": 1 }, "certificateData": { "type": "string", "minLength": 1 }, "privateKey": { "type": "string", "minLength": 1 }, "certificatePath": { "type": "string" }, "autoRenew": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "organizationId": { "type": "string" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "certificateData", "privateKey", "organizationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/certificates.one": { "get": { "operationId": "certificates-one", "summary": "Get a certificate", "description": "Returns a single certificate by its ID. Verifies that the certificate belongs to the current organization.", "tags": [ "certificates" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "certificateId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/certificates.remove": { "post": { "operationId": "certificates-remove", "summary": "Delete a certificate", "description": "Deletes a certificate by its ID after verifying organization ownership. Logs an audit entry before removal.", "tags": [ "certificates" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "certificateId": { "type": "string", "minLength": 1 } }, "required": [ "certificateId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/certificates.all": { "get": { "operationId": "certificates-all", "summary": "List all certificates", "description": "Returns all certificates belonging to the current organization, including their associated server information.", "tags": [ "certificates" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/certificates.update": { "post": { "operationId": "certificates-update", "summary": "Update a certificate", "description": "Updates the name, certificate data, and private key of an existing certificate. Verifies organization ownership before applying changes.", "tags": [ "certificates" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "certificateId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "certificateData": { "type": "string", "minLength": 1 }, "privateKey": { "type": "string", "minLength": 1 } }, "required": [ "certificateId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/cluster.getNodes": { "get": { "operationId": "cluster-getNodes", "summary": "Get cluster nodes", "description": "Retrieves all nodes in the Docker Swarm cluster. Optionally targets a remote server.", "tags": [ "cluster" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/cluster.removeWorker": { "post": { "operationId": "cluster-removeWorker", "summary": "Remove a worker node", "description": "Drains and forcefully removes a worker node from the Docker Swarm cluster. An audit log entry is created for the removal.", "tags": [ "cluster" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "nodeId": { "type": "string" }, "serverId": { "type": "string" } }, "required": [ "nodeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/cluster.addWorker": { "get": { "operationId": "cluster-addWorker", "summary": "Get worker join command", "description": "Returns the Docker Swarm join command and token for adding a new worker node to the cluster, along with the Docker version.", "tags": [ "cluster" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/cluster.addManager": { "get": { "operationId": "cluster-addManager", "summary": "Get manager join command", "description": "Returns the Docker Swarm join command and token for adding a new manager node to the cluster, along with the Docker version.", "tags": [ "cluster" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.create": { "post": { "operationId": "compose-create", "summary": "Create a compose service", "description": "Creates a new Docker Compose service in the specified project environment with the given configuration.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environmentId": { "type": "string" }, "composeType": { "type": "string", "enum": [ "docker-compose", "stack" ] }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeFile": { "type": "string" } }, "required": [ "name", "environmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.one": { "get": { "operationId": "compose-one", "summary": "Get a compose service", "description": "Retrieves detailed information about a compose service by its ID, including git provider access status and deployment configuration.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.update": { "post": { "operationId": "compose-update", "summary": "Update a compose service", "description": "Updates the configuration of a compose service such as name, description, compose file content, and other settings.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string" }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeFile": { "type": "string" }, "refreshToken": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceType": { "type": "string", "enum": [ "git", "github", "gitlab", "bitbucket", "gitea", "raw" ] }, "composeType": { "type": "string", "enum": [ "docker-compose", "stack" ] }, "repository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "owner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "branch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "autoDeploy": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "gitlabProjectId": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "gitlabRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabPathNamespace": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketRepositorySlug": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaRepository": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaOwner": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitBranch": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customGitSSHKeyId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "command": { "type": "string" }, "enableSubmodules": { "type": "boolean" }, "composePath": { "type": "string", "minLength": 1 }, "suffix": { "type": "string" }, "randomize": { "type": "boolean" }, "isolatedDeployment": { "type": "boolean" }, "isolatedDeploymentsVolume": { "type": "boolean" }, "triggerType": { "anyOf": [ { "type": "string", "enum": [ "push", "tag" ] }, { "type": "null" } ] }, "composeStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "environmentId": { "type": "string" }, "createdAt": { "type": "string" }, "watchPaths": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "githubId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "gitlabId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bitbucketId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "giteaId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.saveEnvironment": { "post": { "operationId": "compose-saveEnvironment", "summary": "Save compose environment variables", "description": "Updates the environment variables for a compose service.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "composeId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.delete": { "post": { "operationId": "compose-delete", "summary": "Delete a compose service", "description": "Permanently deletes a compose service and cleans up associated Docker resources, deployments, and directories. Optionally deletes associated volumes.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 }, "deleteVolumes": { "type": "boolean" } }, "required": [ "composeId", "deleteVolumes" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.cleanQueues": { "post": { "operationId": "compose-cleanQueues", "summary": "Clean deployment queues", "description": "Removes all pending deployment jobs from the queue for the specified compose service.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.clearDeployments": { "post": { "operationId": "compose-clearDeployments", "summary": "Clear old deployments", "description": "Removes old deployment logs and artifacts for the compose service to free up disk space.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.killBuild": { "post": { "operationId": "compose-killBuild", "summary": "Kill active build", "description": "Forcefully terminates the currently running Docker build process for the compose service.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.loadServices": { "get": { "operationId": "compose-loadServices", "summary": "Load compose services", "description": "Parses the compose file and returns the list of services defined in it, with their current container status.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "type", "schema": { "default": "cache", "type": "string", "enum": [ "fetch", "cache" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.loadMountsByService": { "get": { "operationId": "compose-loadMountsByService", "summary": "Load mounts by service", "description": "Retrieves the Docker volume mounts for a specific service within a compose stack by inspecting the running container.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "serviceName", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.fetchSourceType": { "post": { "operationId": "compose-fetchSourceType", "summary": "Fetch and clone source", "description": "Clones the compose repository from the configured git provider and returns the source type. Executes the clone command locally or on a remote server.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.randomizeCompose": { "post": { "operationId": "compose-randomizeCompose", "summary": "Randomize compose file", "description": "Adds a random suffix to service names and volumes in the compose file to avoid naming conflicts between deployments.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 }, "suffix": { "type": "string" } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.isolatedDeployment": { "post": { "operationId": "compose-isolatedDeployment", "summary": "Randomize for isolated deployment", "description": "Randomizes the compose file for isolated deployment mode, ensuring unique service and volume names to support parallel deployments.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 }, "suffix": { "type": "string" } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.getConvertedCompose": { "get": { "operationId": "compose-getConvertedCompose", "summary": "Get converted compose file", "description": "Returns the compose file with domains injected as Traefik labels, converted to YAML format ready for deployment.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.deploy": { "post": { "operationId": "compose-deploy", "summary": "Deploy a compose service", "description": "Triggers a new deployment for the compose service. Queues a deployment job or executes it directly for cloud servers.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 }, "title": { "type": "string" }, "description": { "type": "string" } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.redeploy": { "post": { "operationId": "compose-redeploy", "summary": "Redeploy a compose service", "description": "Triggers a rebuild and redeployment of the compose service. Queues a deployment job or executes it directly for cloud servers.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 }, "title": { "type": "string" }, "description": { "type": "string" } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.stop": { "post": { "operationId": "compose-stop", "summary": "Stop a compose service", "description": "Stops all running containers for the compose service using docker compose stop.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.start": { "post": { "operationId": "compose-start", "summary": "Start a compose service", "description": "Starts all containers for the compose service using docker compose start.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.getDefaultCommand": { "get": { "operationId": "compose-getDefaultCommand", "summary": "Get default compose command", "description": "Generates and returns the default docker compose command that would be used to deploy the service.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.refreshToken": { "post": { "operationId": "compose-refreshToken", "summary": "Refresh deploy token", "description": "Regenerates the webhook refresh token for the compose service, invalidating the previous token used for triggering deployments.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.deployTemplate": { "post": { "operationId": "compose-deployTemplate", "summary": "Deploy a template", "description": "Creates a new compose service from a template by fetching its files, processing variables, creating mounts and domains, and setting up the compose configuration.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environmentId": { "type": "string" }, "serverId": { "type": "string" }, "id": { "type": "string" }, "baseUrl": { "type": "string" } }, "required": [ "environmentId", "id" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.templates": { "get": { "operationId": "compose-templates", "summary": "List available templates", "description": "Fetches the list of available compose templates from the GitHub templates repository.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "baseUrl", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.getTags": { "get": { "operationId": "compose-getTags", "summary": "Get template tags", "description": "Fetches all unique tags from the available compose templates for filtering purposes.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "baseUrl", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.disconnectGitProvider": { "post": { "operationId": "compose-disconnectGitProvider", "summary": "Disconnect git provider", "description": "Removes all git provider configuration from the compose service, resetting source type to default and clearing repository, branch, and owner fields for all providers.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.move": { "post": { "operationId": "compose-move", "summary": "Move compose to another environment", "description": "Moves a compose service to a different environment within the same project or to another project's environment.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "composeId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.processTemplate": { "post": { "operationId": "compose-processTemplate", "summary": "Process a template", "description": "Processes a base64-encoded template configuration, resolving variables and generating the compose file and environment settings without applying them.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "base64": { "type": "string" }, "composeId": { "type": "string", "minLength": 1 } }, "required": [ "base64", "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.import": { "post": { "operationId": "compose-import", "summary": "Import a template", "description": "Imports a base64-encoded template into an existing compose service, replacing its compose file, environment variables, mounts, and domains with the template's configuration.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "base64": { "type": "string" }, "composeId": { "type": "string", "minLength": 1 } }, "required": [ "base64", "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.cancelDeployment": { "post": { "operationId": "compose-cancelDeployment", "summary": "Cancel a deployment", "description": "Cancels an in-progress deployment for the compose service and resets its status to idle. Only available in cloud version.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "composeId": { "type": "string", "minLength": 1 } }, "required": [ "composeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.search": { "get": { "operationId": "compose-search", "summary": "Search compose services", "description": "Searches compose services by name, appName, or description with pagination. Respects service-level access control.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/compose.readLogs": { "get": { "operationId": "compose-readLogs", "summary": "Read compose container logs", "description": "Retrieves Docker container logs for a specific container within the compose service with configurable tail length, time range, and optional text search filtering.", "tags": [ "compose" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "containerId", "schema": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.all": { "get": { "operationId": "deployment-all", "summary": "List deployments by application", "description": "Returns all deployments associated with the given application, ordered by creation date.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.allByCompose": { "get": { "operationId": "deployment-allByCompose", "summary": "List deployments by compose", "description": "Returns all deployments associated with the given compose service.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.allByServer": { "get": { "operationId": "deployment-allByServer", "summary": "List deployments by server", "description": "Returns all deployments associated with the given server.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.allCentralized": { "get": { "operationId": "deployment-allCentralized", "summary": "List all deployments centralized", "description": "Returns all deployments across all services in the organization. Non-admin users only see deployments for their accessible services.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.queueList": { "get": { "operationId": "deployment-queueList", "summary": "List deployment queue jobs", "description": "Returns all jobs in the deployment queue with their current state, timestamps, and resolved service paths.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.allByType": { "get": { "operationId": "deployment-allByType", "summary": "List deployments by service type", "description": "Returns all deployments for a given service ID and type (application, compose, etc.), including associated rollback information.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "application", "compose", "server", "schedule", "previewDeployment", "backup", "volumeBackup" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.killProcess": { "post": { "operationId": "deployment-killProcess", "summary": "Cancel a running deployment", "description": "Kills the running process of a deployment by sending SIGKILL to its PID. Updates the deployment status to error.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "deploymentId": { "type": "string", "minLength": 1 } }, "required": [ "deploymentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.removeDeployment": { "post": { "operationId": "deployment-removeDeployment", "summary": "Delete a deployment", "description": "Permanently removes a deployment record and its associated data.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "deploymentId": { "type": "string", "minLength": 1 } }, "required": [ "deploymentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/deployment.readBuildLogs": { "get": { "operationId": "deployment-readBuildLogs", "summary": "Read deployment build logs", "description": "Reads the build/deployment log file for a specific deployment. Returns the last N lines (default 200). Works for both local and remote server deployments.", "tags": [ "deployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "deploymentId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 200, "type": "integer", "minimum": 1, "maximum": 10000 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/destination.create": { "post": { "operationId": "destination-create", "summary": "Create backup destination", "description": "Creates a new S3-compatible backup destination for the current organization and logs an audit event.", "tags": [ "destination" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "accessKey": { "type": "string" }, "bucket": { "type": "string" }, "region": { "type": "string" }, "endpoint": { "type": "string" }, "secretAccessKey": { "type": "string" }, "additionalFlags": { "anyOf": [ { "default": [], "type": "array", "items": { "type": "string", "pattern": "^--[a-zA-Z0-9-]+(=[a-zA-Z0-9._:/@-]+)?$" } }, { "type": "null" } ] }, "serverId": { "type": "string" } }, "required": [ "name", "provider", "accessKey", "bucket", "region", "endpoint", "secretAccessKey", "additionalFlags" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/destination.testConnection": { "post": { "operationId": "destination-testConnection", "summary": "Test backup destination connection", "description": "Tests connectivity to an S3-compatible bucket using rclone. Runs locally or on a remote server depending on configuration.", "tags": [ "destination" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "accessKey": { "type": "string" }, "bucket": { "type": "string" }, "region": { "type": "string" }, "endpoint": { "type": "string" }, "secretAccessKey": { "type": "string" }, "additionalFlags": { "anyOf": [ { "default": [], "type": "array", "items": { "type": "string", "pattern": "^--[a-zA-Z0-9-]+(=[a-zA-Z0-9._:/@-]+)?$" } }, { "type": "null" } ] }, "serverId": { "type": "string" } }, "required": [ "name", "provider", "accessKey", "bucket", "region", "endpoint", "secretAccessKey", "additionalFlags" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/destination.one": { "get": { "operationId": "destination-one", "summary": "Get backup destination", "description": "Returns a single backup destination by ID. Verifies the caller belongs to the same organization.", "tags": [ "destination" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "destinationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/destination.all": { "get": { "operationId": "destination-all", "summary": "List all backup destinations", "description": "Returns all S3-compatible backup destinations for the current organization, ordered by creation date descending.", "tags": [ "destination" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/destination.remove": { "post": { "operationId": "destination-remove", "summary": "Delete backup destination", "description": "Removes a backup destination by ID. Verifies organization ownership and logs an audit event before deletion.", "tags": [ "destination" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "destinationId": { "type": "string" } }, "required": [ "destinationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/destination.update": { "post": { "operationId": "destination-update", "summary": "Update backup destination", "description": "Updates an existing backup destination. Verifies organization ownership before applying changes and logs an audit event.", "tags": [ "destination" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "accessKey": { "type": "string" }, "bucket": { "type": "string" }, "region": { "type": "string" }, "endpoint": { "type": "string" }, "secretAccessKey": { "type": "string" }, "destinationId": { "type": "string" }, "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "additionalFlags": { "anyOf": [ { "default": [], "type": "array", "items": { "type": "string", "pattern": "^--[a-zA-Z0-9-]+(=[a-zA-Z0-9._:/@-]+)?$" } }, { "type": "null" } ] }, "serverId": { "type": "string" } }, "required": [ "name", "accessKey", "bucket", "region", "endpoint", "secretAccessKey", "destinationId", "provider", "additionalFlags" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.getContainers": { "get": { "operationId": "docker-getContainers", "summary": "Get Docker containers", "description": "Retrieves a list of all Docker containers. Optionally targets a specific remote server by ID.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.restartContainer": { "post": { "operationId": "docker-restartContainer", "summary": "Restart a Docker container", "description": "Restarts a Docker container by its ID. An audit log entry is created for the action.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "containerId": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" } }, "required": [ "containerId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.removeContainer": { "post": { "operationId": "docker-removeContainer", "summary": "Remove a Docker container", "description": "Removes a Docker container by its ID. Optionally targets a remote server. An audit log entry is created for the deletion.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "containerId": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "serverId": { "type": "string" } }, "required": [ "containerId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.getConfig": { "get": { "operationId": "docker-getConfig", "summary": "Get Docker container configuration", "description": "Retrieves the configuration (inspect data) for a specific Docker container. Optionally targets a remote server.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "containerId", "schema": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.getContainersByAppNameMatch": { "get": { "operationId": "docker-getContainersByAppNameMatch", "summary": "Get containers by app name match", "description": "Retrieves containers whose names match the given application name. Supports filtering by app type (stack or docker-compose) and optionally targets a remote server.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "appType", "schema": { "type": "string", "enum": [ "stack", "docker-compose" ] } }, { "in": "query", "name": "appName", "schema": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.getContainersByAppLabel": { "get": { "operationId": "docker-getContainersByAppLabel", "summary": "Get containers by app label", "description": "Retrieves containers filtered by application label. Supports standalone and swarm deployment types, and optionally targets a remote server.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "appName", "schema": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "standalone", "swarm" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.getStackContainersByAppName": { "get": { "operationId": "docker-getStackContainersByAppName", "summary": "Get stack containers by app name", "description": "Retrieves all containers belonging to a Docker stack by application name. Optionally targets a remote server.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "appName", "schema": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.getServiceContainersByAppName": { "get": { "operationId": "docker-getServiceContainersByAppName", "summary": "Get service containers by app name", "description": "Retrieves all containers belonging to a Docker Swarm service by application name. Optionally targets a remote server.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "appName", "schema": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/docker.uploadFileToContainer": { "post": { "operationId": "docker-uploadFileToContainer", "summary": "Upload a file to a Docker container", "description": "Uploads a file to a specified path inside a Docker container. The file is converted to a buffer and transferred to the container's filesystem.", "tags": [ "docker" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "containerId": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9.\\-_]+$" }, "file": { "type": "string", "format": "binary" }, "destinationPath": { "type": "string", "minLength": 1 }, "serverId": { "type": "string" } }, "required": [ "containerId", "file", "destinationPath" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.create": { "post": { "operationId": "domain-create", "summary": "Create a domain", "description": "Creates a new domain for an application or compose service. Validates permissions and logs an audit entry.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "host": { "type": "string", "minLength": 1 }, "path": { "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "null" } ] }, "port": { "anyOf": [ { "type": "number", "minimum": 1, "maximum": 65535 }, { "type": "null" } ] }, "customEntrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "https": { "type": "boolean" }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "certificateType": { "type": "string", "enum": [ "letsencrypt", "none", "custom" ] }, "customCertResolver": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domainType": { "anyOf": [ { "type": "string", "enum": [ "compose", "application", "preview" ] }, { "type": "null" } ] }, "previewDeploymentId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "internalPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "stripPath": { "type": "boolean" }, "middlewares": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] } }, "required": [ "host" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.byApplicationId": { "get": { "operationId": "domain-byApplicationId", "summary": "List domains by application", "description": "Returns all domains associated with a given application ID.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.byComposeId": { "get": { "operationId": "domain-byComposeId", "summary": "List domains by compose service", "description": "Returns all domains associated with a given compose service ID.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "composeId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.generateDomain": { "post": { "operationId": "domain-generateDomain", "summary": "Generate a traefik.me domain", "description": "Generates a free traefik.me domain for an application, using the server IP to create a wildcard subdomain.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appName": { "type": "string" }, "serverId": { "type": "string" } }, "required": [ "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.canGenerateTraefikMeDomains": { "get": { "operationId": "domain-canGenerateTraefikMeDomains", "summary": "Check traefik.me domain availability", "description": "Checks whether traefik.me domains can be generated by returning the server IP address. Returns the IP from the server record or web server settings.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.update": { "post": { "operationId": "domain-update", "summary": "Update a domain", "description": "Updates a domain's configuration and refreshes the Traefik routing rules for the associated application or preview deployment.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "host": { "type": "string", "minLength": 1 }, "path": { "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "null" } ] }, "port": { "anyOf": [ { "type": "number", "minimum": 1, "maximum": 65535 }, { "type": "null" } ] }, "customEntrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "https": { "type": "boolean" }, "certificateType": { "type": "string", "enum": [ "letsencrypt", "none", "custom" ] }, "customCertResolver": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domainType": { "anyOf": [ { "type": "string", "enum": [ "compose", "application", "preview" ] }, { "type": "null" } ] }, "internalPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "stripPath": { "type": "boolean" }, "middlewares": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "domainId": { "type": "string" } }, "required": [ "host", "domainId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.one": { "get": { "operationId": "domain-one", "summary": "Get a domain", "description": "Returns a single domain by its ID. Validates read permissions against the associated service or preview deployment.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "domainId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.delete": { "post": { "operationId": "domain-delete", "summary": "Delete a domain", "description": "Deletes a domain by its ID and removes the associated Traefik routing configuration for the application.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "domainId": { "type": "string", "minLength": 1 } }, "required": [ "domainId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/domain.validateDomain": { "post": { "operationId": "domain-validateDomain", "summary": "Validate a domain", "description": "Checks whether a domain's DNS records are correctly configured, optionally verifying against a specific server IP.", "tags": [ "domain" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "domain": { "type": "string" }, "serverIp": { "type": "string" } }, "required": [ "domain" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.create": { "post": { "operationId": "gitea-create", "summary": "Create Gitea provider", "description": "Creates a new Gitea provider configuration linked to the active organization. Requires gitProviders create permission.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "giteaId": { "type": "string" }, "giteaUrl": { "type": "string", "minLength": 1 }, "giteaInternalUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "redirectUri": { "type": "string" }, "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "gitProviderId": { "type": "string" }, "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "expiresAt": { "type": "number" }, "scopes": { "type": "string" }, "lastAuthenticatedAt": { "type": "number" }, "name": { "type": "string", "minLength": 1 }, "giteaUsername": { "type": "string" }, "organizationName": { "type": "string" } }, "required": [ "giteaUrl", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.one": { "get": { "operationId": "gitea-one", "summary": "Get Gitea provider", "description": "Returns a single Gitea provider configuration by its ID.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "giteaId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.giteaProviders": { "get": { "operationId": "gitea-giteaProviders", "summary": "List Gitea providers", "description": "Returns all Gitea providers accessible to the current user within the active organization, filtered to only those with valid credentials.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.getGiteaRepositories": { "get": { "operationId": "gitea-getGiteaRepositories", "summary": "List Gitea repositories", "description": "Fetches the list of repositories accessible by the Gitea provider. Calls the Gitea API using the provider's credentials.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "giteaId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.getGiteaBranches": { "get": { "operationId": "gitea-getGiteaBranches", "summary": "List Gitea branches", "description": "Fetches the list of branches for a specific Gitea repository. Calls the Gitea API using the provider's credentials.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "owner", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "repositoryName", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "giteaId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.testConnection": { "post": { "operationId": "gitea-testConnection", "summary": "Test Gitea connection", "description": "Tests the connection to a Gitea provider by attempting to fetch its repositories. Returns the number of repositories found or throws an error on failure.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "giteaId": { "type": "string" }, "organizationName": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.update": { "post": { "operationId": "gitea-update", "summary": "Update Gitea provider", "description": "Updates a Gitea provider configuration and its associated git provider record. Requires gitProviders create permission.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "giteaId": { "type": "string", "minLength": 1 }, "giteaUrl": { "type": "string", "minLength": 1 }, "giteaInternalUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "redirectUri": { "type": "string" }, "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "gitProviderId": { "type": "string" }, "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "expiresAt": { "type": "number" }, "scopes": { "type": "string" }, "lastAuthenticatedAt": { "type": "number" }, "name": { "type": "string", "minLength": 1 }, "giteaUsername": { "type": "string" }, "organizationName": { "type": "string" } }, "required": [ "giteaId", "giteaUrl", "gitProviderId", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitea.getGiteaUrl": { "get": { "operationId": "gitea-getGiteaUrl", "summary": "Get Gitea instance URL", "description": "Returns the base URL of the Gitea instance associated with the given provider ID.", "tags": [ "gitea" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "giteaId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitProvider.getAll": { "get": { "operationId": "gitProvider-getAll", "summary": "List all git providers", "description": "Returns all git providers (GitHub, GitLab, Bitbucket, Gitea) accessible to the current user within the active organization, ordered by creation date.", "tags": [ "gitProvider" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitProvider.toggleShare": { "post": { "operationId": "gitProvider-toggleShare", "summary": "Toggle git provider sharing", "description": "Toggles whether a git provider is shared with the entire organization. Only the owner of the provider can change this setting.", "tags": [ "gitProvider" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "gitProviderId": { "type": "string", "minLength": 1 }, "sharedWithOrganization": { "type": "boolean" } }, "required": [ "gitProviderId", "sharedWithOrganization" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitProvider.allForPermissions": { "get": { "operationId": "gitProvider-allForPermissions", "summary": "List git providers for permissions", "description": "Returns a minimal list of all git providers in the organization for use in permission assignment UIs. Requires a valid enterprise license and member update permission.", "tags": [ "gitProvider" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitProvider.remove": { "post": { "operationId": "gitProvider-remove", "summary": "Remove git provider", "description": "Deletes a git provider from the organization. Requires gitProviders delete permission and the provider must belong to the active organization.", "tags": [ "gitProvider" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "gitProviderId": { "type": "string", "minLength": 1 } }, "required": [ "gitProviderId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/github.one": { "get": { "operationId": "github-one", "summary": "Get GitHub provider", "description": "Returns a single GitHub provider configuration by its ID.", "tags": [ "github" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "githubId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/github.getGithubRepositories": { "get": { "operationId": "github-getGithubRepositories", "summary": "List GitHub repositories", "description": "Fetches the list of repositories accessible by the GitHub provider. Calls the GitHub API using the provider's credentials.", "tags": [ "github" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "githubId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/github.getGithubBranches": { "get": { "operationId": "github-getGithubBranches", "summary": "List GitHub branches", "description": "Fetches the list of branches for a specific GitHub repository. Calls the GitHub API using the provider's credentials.", "tags": [ "github" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "repo", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "owner", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "githubId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/github.githubProviders": { "get": { "operationId": "github-githubProviders", "summary": "List GitHub providers", "description": "Returns all GitHub providers accessible to the current user within the active organization, filtered to only those with valid credentials.", "tags": [ "github" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/github.testConnection": { "post": { "operationId": "github-testConnection", "summary": "Test GitHub connection", "description": "Tests the connection to a GitHub provider by attempting to fetch its repositories. Returns the number of repositories found or throws an error on failure.", "tags": [ "github" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "githubId": { "type": "string", "minLength": 1 } }, "required": [ "githubId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/github.update": { "post": { "operationId": "github-update", "summary": "Update GitHub provider", "description": "Updates a GitHub provider configuration and its associated git provider record. Requires gitProviders create permission.", "tags": [ "github" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "githubId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "gitProviderId": { "type": "string", "minLength": 1 }, "githubAppName": { "type": "string", "minLength": 1 } }, "required": [ "githubId", "name", "gitProviderId", "githubAppName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.create": { "post": { "operationId": "gitlab-create", "summary": "Create GitLab provider", "description": "Creates a new GitLab provider configuration linked to the active organization. Requires gitProviders create permission.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "secret": { "type": "string" }, "groupName": { "type": "string" }, "gitProviderId": { "type": "string" }, "redirectUri": { "type": "string" }, "authId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "gitlabUrl": { "type": "string", "minLength": 1 }, "gitlabInternalUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "authId", "name", "gitlabUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.one": { "get": { "operationId": "gitlab-one", "summary": "Get GitLab provider", "description": "Returns a single GitLab provider configuration by its ID.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "gitlabId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.gitlabProviders": { "get": { "operationId": "gitlab-gitlabProviders", "summary": "List GitLab providers", "description": "Returns all GitLab providers accessible to the current user within the active organization, filtered to only those with valid credentials.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.getGitlabRepositories": { "get": { "operationId": "gitlab-getGitlabRepositories", "summary": "List GitLab repositories", "description": "Fetches the list of repositories accessible by the GitLab provider. Calls the GitLab API using the provider's credentials.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "gitlabId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.getGitlabBranches": { "get": { "operationId": "gitlab-getGitlabBranches", "summary": "List GitLab branches", "description": "Fetches the list of branches for a specific GitLab repository. Calls the GitLab API using the provider's credentials.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "number" } }, { "in": "query", "name": "owner", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "repo", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "gitlabId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.testConnection": { "post": { "operationId": "gitlab-testConnection", "summary": "Test GitLab connection", "description": "Tests the connection to a GitLab provider by attempting to fetch its repositories. Returns the number of repositories found or throws an error on failure.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "gitlabId": { "type": "string", "minLength": 1 }, "groupName": { "type": "string" } }, "required": [ "gitlabId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/gitlab.update": { "post": { "operationId": "gitlab-update", "summary": "Update GitLab provider", "description": "Updates a GitLab provider configuration and its associated git provider record. Requires gitProviders create permission.", "tags": [ "gitlab" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "secret": { "type": "string" }, "groupName": { "type": "string" }, "redirectUri": { "type": "string" }, "name": { "type": "string", "minLength": 1 }, "gitlabId": { "type": "string", "minLength": 1 }, "gitlabUrl": { "type": "string", "minLength": 1 }, "gitProviderId": { "type": "string", "minLength": 1 }, "gitlabInternalUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "gitlabId", "gitlabUrl", "gitProviderId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.create": { "post": { "operationId": "libsql-create", "summary": "Create a LibSQL database", "description": "Creates a new LibSQL database service with the specified configuration, sets up a persistent data volume, and registers it in the project.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1 }, "dockerImage": { "default": "ghcr.io/tursodatabase/libsql-server:v0.24.32", "type": "string" }, "environmentId": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "sqldNode": { "type": "string", "enum": [ "primary", "replica" ] }, "sqldPrimaryUrl": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, { "type": "null" } ] }, "enableNamespaces": { "default": false, "type": "boolean" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "appName", "dockerImage", "environmentId", "description", "databaseUser", "databasePassword", "sqldNode", "sqldPrimaryUrl", "enableNamespaces", "serverId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.one": { "get": { "operationId": "libsql-one", "summary": "Get a LibSQL database by ID", "description": "Returns the full details of a LibSQL database service, including its environment and project configuration.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "libsqlId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.start": { "post": { "operationId": "libsql-start", "summary": "Start a LibSQL database", "description": "Starts the Docker container for the specified LibSQL database and sets its status to done.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string", "minLength": 1 } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.stop": { "post": { "operationId": "libsql-stop", "summary": "Stop a LibSQL database", "description": "Stops the Docker container for the specified LibSQL database and sets its status to idle.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string", "minLength": 1 } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.saveExternalPorts": { "post": { "operationId": "libsql-saveExternalPorts", "summary": "Save the external ports for a LibSQL database", "description": "Updates the external port mappings (HTTP, gRPC, admin) for the LibSQL database and triggers a redeployment. Validates that ports are not already in use.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "externalGRPCPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "externalAdminPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.deploy": { "post": { "operationId": "libsql-deploy", "summary": "Deploy a LibSQL database", "description": "Triggers a deployment for the specified LibSQL database, rebuilding and restarting its Docker container with the current configuration.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.changeStatus": { "post": { "operationId": "libsql-changeStatus", "summary": "Change LibSQL database status", "description": "Updates the application status of a LibSQL database without starting or stopping the container.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] } }, "required": [ "libsqlId", "applicationStatus" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.remove": { "post": { "operationId": "libsql-remove", "summary": "Delete a LibSQL database", "description": "Removes the LibSQL database service, its Docker container, and deletes the database record.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string", "minLength": 1 } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.saveEnvironment": { "post": { "operationId": "libsql-saveEnvironment", "summary": "Save environment variables for a LibSQL database", "description": "Updates the environment variables for the specified LibSQL database service.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "libsqlId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.reload": { "post": { "operationId": "libsql-reload", "summary": "Reload a LibSQL database", "description": "Restarts the LibSQL database by stopping and then starting its Docker container.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" }, "appName": { "type": "string", "minLength": 1 } }, "required": [ "libsqlId", "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.update": { "post": { "operationId": "libsql-update", "summary": "Update a LibSQL database", "description": "Updates the configuration of an existing LibSQL database service.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "sqldNode": { "type": "string", "enum": [ "primary", "replica" ] }, "sqldPrimaryUrl": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, { "type": "null" } ] }, "enableNamespaces": { "default": false, "type": "boolean" }, "dockerImage": { "default": "ghcr.io/tursodatabase/libsql-server:v0.24.32", "type": "string" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "externalGRPCPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "externalAdminPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "createdAt": { "type": "string" }, "environmentId": { "type": "string" } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.move": { "post": { "operationId": "libsql-move", "summary": "Move a LibSQL database to another environment", "description": "Moves the LibSQL database to a different environment within the same project.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "libsqlId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.rebuild": { "post": { "operationId": "libsql-rebuild", "summary": "Rebuild a LibSQL database", "description": "Rebuilds the LibSQL database Docker container from scratch, pulling the latest image and recreating the service.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "libsqlId": { "type": "string" } }, "required": [ "libsqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/libsql.readLogs": { "get": { "operationId": "libsql-readLogs", "summary": "Read LibSQL container logs", "description": "Retrieves the Docker container logs for the specified LibSQL database, with support for tail count, time-based filtering, and text search.", "tags": [ "libsql" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "libsqlId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.create": { "post": { "operationId": "mariadb-create", "summary": "Create a MariaDB database", "description": "Creates a new MariaDB database service with the specified configuration, sets up a persistent data volume, and registers it in the project.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "dockerImage": { "default": "mariadb:6", "type": "string" }, "databaseRootPassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "environmentId": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseName": { "type": "string", "minLength": 1 }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "environmentId", "databaseName", "databaseUser", "databasePassword" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.one": { "get": { "operationId": "mariadb-one", "summary": "Get a MariaDB database by ID", "description": "Returns the full details of a MariaDB database service, including its environment and project configuration.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mariadbId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.start": { "post": { "operationId": "mariadb-start", "summary": "Start a MariaDB database", "description": "Starts the Docker container for the specified MariaDB database and sets its status to done.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string", "minLength": 1 } }, "required": [ "mariadbId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.stop": { "post": { "operationId": "mariadb-stop", "summary": "Stop a MariaDB database", "description": "Stops the Docker container for the specified MariaDB database and sets its status to idle.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string", "minLength": 1 } }, "required": [ "mariadbId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.saveExternalPort": { "post": { "operationId": "mariadb-saveExternalPort", "summary": "Save the external port for a MariaDB database", "description": "Updates the external port mapping for the MariaDB database and triggers a redeployment. Validates that the port is not already in use.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "mariadbId", "externalPort" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.deploy": { "post": { "operationId": "mariadb-deploy", "summary": "Deploy a MariaDB database", "description": "Triggers a deployment for the specified MariaDB database, rebuilding and restarting its Docker container with the current configuration.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" } }, "required": [ "mariadbId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.changeStatus": { "post": { "operationId": "mariadb-changeStatus", "summary": "Change MariaDB database status", "description": "Updates the application status of a MariaDB database without starting or stopping the container.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] } }, "required": [ "mariadbId", "applicationStatus" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.remove": { "post": { "operationId": "mariadb-remove", "summary": "Delete a MariaDB database", "description": "Removes the MariaDB database service, its Docker container, cancels associated backup jobs, and deletes the database record.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string", "minLength": 1 } }, "required": [ "mariadbId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.saveEnvironment": { "post": { "operationId": "mariadb-saveEnvironment", "summary": "Save environment variables for a MariaDB database", "description": "Updates the environment variables for the specified MariaDB database service.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "mariadbId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.reload": { "post": { "operationId": "mariadb-reload", "summary": "Reload a MariaDB database", "description": "Restarts the MariaDB database by stopping and then starting its Docker container.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" } }, "required": [ "mariadbId", "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.update": { "post": { "operationId": "mariadb-update", "summary": "Update a MariaDB database", "description": "Updates the configuration of an existing MariaDB database service.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseName": { "type": "string", "minLength": 1 }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "databaseRootPassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "dockerImage": { "type": "string" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "args": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "ulimitsSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Name": { "type": "string", "minLength": 1 }, "Soft": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 }, "Hard": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 } }, "required": [ "Name", "Soft", "Hard" ], "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "createdAt": { "type": "string" }, "environmentId": { "type": "string" } }, "required": [ "mariadbId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.changePassword": { "post": { "operationId": "mariadb-changePassword", "summary": "Change MariaDB database password", "description": "Changes the password for a MariaDB user or root account by executing ALTER USER inside the running container and updating the stored password.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "type": { "default": "user", "type": "string", "enum": [ "user", "root" ] } }, "required": [ "mariadbId", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.move": { "post": { "operationId": "mariadb-move", "summary": "Move a MariaDB database to another environment", "description": "Moves the MariaDB database to a different environment within the same project.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "mariadbId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.rebuild": { "post": { "operationId": "mariadb-rebuild", "summary": "Rebuild a MariaDB database", "description": "Rebuilds the MariaDB database Docker container from scratch, pulling the latest image and recreating the service.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mariadbId": { "type": "string" } }, "required": [ "mariadbId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.search": { "get": { "operationId": "mariadb-search", "summary": "Search MariaDB databases", "description": "Returns a paginated list of MariaDB databases matching the given filters. Supports searching by name, appName, description, project, and environment.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mariadb.readLogs": { "get": { "operationId": "mariadb-readLogs", "summary": "Read MariaDB container logs", "description": "Retrieves the Docker container logs for the specified MariaDB database, with support for tail count, time-based filtering, and text search.", "tags": [ "mariadb" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mariadbId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.create": { "post": { "operationId": "mongo-create", "summary": "Create a MongoDB database", "description": "Creates a new MongoDB database service with the specified configuration, sets up a persistent data volume, and registers it in the project.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "dockerImage": { "default": "mongo:15", "type": "string" }, "environmentId": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replicaSets": { "anyOf": [ { "default": false, "type": "boolean" }, { "type": "null" } ] } }, "required": [ "name", "environmentId", "databaseUser", "databasePassword" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.one": { "get": { "operationId": "mongo-one", "summary": "Get a MongoDB database by ID", "description": "Returns the full details of a MongoDB database service, including its environment and project configuration.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mongoId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.start": { "post": { "operationId": "mongo-start", "summary": "Start a MongoDB database", "description": "Starts the Docker container for the specified MongoDB database and sets its status to done.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string", "minLength": 1 } }, "required": [ "mongoId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.stop": { "post": { "operationId": "mongo-stop", "summary": "Stop a MongoDB database", "description": "Stops the Docker container for the specified MongoDB database and sets its status to idle.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string", "minLength": 1 } }, "required": [ "mongoId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.saveExternalPort": { "post": { "operationId": "mongo-saveExternalPort", "summary": "Save the external port for a MongoDB database", "description": "Updates the external port mapping for the MongoDB database and triggers a redeployment. Validates that the port is not already in use.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "mongoId", "externalPort" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.deploy": { "post": { "operationId": "mongo-deploy", "summary": "Deploy a MongoDB database", "description": "Triggers a deployment for the specified MongoDB database, rebuilding and restarting its Docker container with the current configuration.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" } }, "required": [ "mongoId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.changeStatus": { "post": { "operationId": "mongo-changeStatus", "summary": "Change MongoDB database status", "description": "Updates the application status of a MongoDB database without starting or stopping the container.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] } }, "required": [ "mongoId", "applicationStatus" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.reload": { "post": { "operationId": "mongo-reload", "summary": "Reload a MongoDB database", "description": "Restarts the MongoDB database by stopping and then starting its Docker container.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" } }, "required": [ "mongoId", "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.remove": { "post": { "operationId": "mongo-remove", "summary": "Delete a MongoDB database", "description": "Removes the MongoDB database service, its Docker container, cancels associated backup jobs, and deletes the database record.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string", "minLength": 1 } }, "required": [ "mongoId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.saveEnvironment": { "post": { "operationId": "mongo-saveEnvironment", "summary": "Save environment variables for a MongoDB database", "description": "Updates the environment variables for the specified MongoDB database service.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "mongoId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.update": { "post": { "operationId": "mongo-update", "summary": "Update a MongoDB database", "description": "Updates the configuration of an existing MongoDB database service.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "dockerImage": { "type": "string" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "args": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "ulimitsSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Name": { "type": "string", "minLength": 1 }, "Soft": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 }, "Hard": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 } }, "required": [ "Name", "Soft", "Hard" ], "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "createdAt": { "type": "string" }, "environmentId": { "type": "string" }, "replicaSets": { "anyOf": [ { "default": false, "type": "boolean" }, { "type": "null" } ] } }, "required": [ "mongoId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.changePassword": { "post": { "operationId": "mongo-changePassword", "summary": "Change MongoDB database password", "description": "Changes the password for the MongoDB database user by executing changeUserPassword via mongosh inside the running container and updating the stored password.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" } }, "required": [ "mongoId", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.move": { "post": { "operationId": "mongo-move", "summary": "Move a MongoDB database to another environment", "description": "Moves the MongoDB database to a different environment within the same project.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "mongoId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.rebuild": { "post": { "operationId": "mongo-rebuild", "summary": "Rebuild a MongoDB database", "description": "Rebuilds the MongoDB database Docker container from scratch, pulling the latest image and recreating the service.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mongoId": { "type": "string" } }, "required": [ "mongoId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.search": { "get": { "operationId": "mongo-search", "summary": "Search MongoDB databases", "description": "Returns a paginated list of MongoDB databases matching the given filters. Supports searching by name, appName, description, project, and environment.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mongo.readLogs": { "get": { "operationId": "mongo-readLogs", "summary": "Read MongoDB container logs", "description": "Retrieves the Docker container logs for the specified MongoDB database, with support for tail count, time-based filtering, and text search.", "tags": [ "mongo" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mongoId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mounts.create": { "post": { "operationId": "mounts-create", "summary": "Create mount", "description": "Creates a new volume, bind, or file mount for a service. Checks service-level volume permissions and logs an audit event.", "tags": [ "mounts" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "bind", "volume", "file" ] }, "hostPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "volumeName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mountPath": { "type": "string", "minLength": 1 }, "filePath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serviceType": { "type": "string", "enum": [ "application", "postgres", "mysql", "mariadb", "mongo", "redis", "compose", "libsql" ] }, "serviceId": { "type": "string", "minLength": 1 } }, "required": [ "type", "mountPath", "serviceId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mounts.remove": { "post": { "operationId": "mounts-remove", "summary": "Delete mount", "description": "Removes a mount by ID. Resolves the owning service to check volume delete permissions and logs an audit event.", "tags": [ "mounts" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mountId": { "type": "string" } }, "required": [ "mountId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mounts.one": { "get": { "operationId": "mounts-one", "summary": "Get mount", "description": "Returns a single mount by ID. Resolves the owning service to check volume read permissions.", "tags": [ "mounts" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mountId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mounts.update": { "post": { "operationId": "mounts-update", "summary": "Update mount", "description": "Updates an existing mount. Resolves the owning service to check volume create permissions and logs an audit event.", "tags": [ "mounts" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mountId": { "type": "string", "minLength": 1 }, "type": { "type": "string", "enum": [ "bind", "volume", "file" ] }, "hostPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "volumeName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "filePath": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "content": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serviceType": { "type": "string", "enum": [ "application", "postgres", "mysql", "mariadb", "mongo", "redis", "compose", "libsql" ] }, "mountPath": { "type": "string", "minLength": 1 }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "libsqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mariadbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mongoId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mysqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "postgresId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "redisId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "mountId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mounts.allNamedByApplicationId": { "get": { "operationId": "mounts-allNamedByApplicationId", "summary": "List named volumes by application", "description": "Returns Docker named volumes attached to the running container of a given application. Inspects the live container to retrieve mount information.", "tags": [ "mounts" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mounts.listByServiceId": { "get": { "operationId": "mounts-listByServiceId", "summary": "List mounts by service", "description": "Returns all configured mounts for a given service (application, compose, or database). Verifies service access and organization ownership.", "tags": [ "mounts" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serviceType", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "serviceId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.create": { "post": { "operationId": "mysql-create", "summary": "Create a MySQL database", "description": "Creates a new MySQL database service with the specified configuration, sets up a persistent data volume, and registers it in the project.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "dockerImage": { "default": "mysql:8", "type": "string" }, "environmentId": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseName": { "type": "string", "minLength": 1 }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "databaseRootPassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "environmentId", "databaseName", "databaseUser", "databasePassword" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.one": { "get": { "operationId": "mysql-one", "summary": "Get a MySQL database by ID", "description": "Returns the full details of a MySQL database service, including its environment and project configuration.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mysqlId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.start": { "post": { "operationId": "mysql-start", "summary": "Start a MySQL database", "description": "Starts the Docker container for the specified MySQL database and sets its status to done.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string", "minLength": 1 } }, "required": [ "mysqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.stop": { "post": { "operationId": "mysql-stop", "summary": "Stop a MySQL database", "description": "Stops the Docker container for the specified MySQL database and sets its status to idle.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string", "minLength": 1 } }, "required": [ "mysqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.saveExternalPort": { "post": { "operationId": "mysql-saveExternalPort", "summary": "Save the external port for a MySQL database", "description": "Updates the external port mapping for the MySQL database and triggers a redeployment. Validates that the port is not already in use.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "mysqlId", "externalPort" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.deploy": { "post": { "operationId": "mysql-deploy", "summary": "Deploy a MySQL database", "description": "Triggers a deployment for the specified MySQL database, rebuilding and restarting its Docker container with the current configuration.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" } }, "required": [ "mysqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.changeStatus": { "post": { "operationId": "mysql-changeStatus", "summary": "Change MySQL database status", "description": "Updates the application status of a MySQL database without starting or stopping the container.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] } }, "required": [ "mysqlId", "applicationStatus" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.reload": { "post": { "operationId": "mysql-reload", "summary": "Reload a MySQL database", "description": "Restarts the MySQL database by stopping and then starting its Docker container.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" } }, "required": [ "mysqlId", "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.remove": { "post": { "operationId": "mysql-remove", "summary": "Delete a MySQL database", "description": "Removes the MySQL database service, its Docker container, cancels associated backup jobs, and deletes the database record.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string", "minLength": 1 } }, "required": [ "mysqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.saveEnvironment": { "post": { "operationId": "mysql-saveEnvironment", "summary": "Save environment variables for a MySQL database", "description": "Updates the environment variables for the specified MySQL database service.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "mysqlId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.update": { "post": { "operationId": "mysql-update", "summary": "Update a MySQL database", "description": "Updates the configuration of an existing MySQL database service.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databaseName": { "type": "string", "minLength": 1 }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "databaseRootPassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "dockerImage": { "type": "string" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "args": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "ulimitsSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Name": { "type": "string", "minLength": 1 }, "Soft": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 }, "Hard": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 } }, "required": [ "Name", "Soft", "Hard" ], "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "createdAt": { "type": "string" }, "environmentId": { "type": "string" } }, "required": [ "mysqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.changePassword": { "post": { "operationId": "mysql-changePassword", "summary": "Change MySQL database password", "description": "Changes the password for a MySQL user or root account by executing ALTER USER inside the running container and updating the stored password.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "type": { "default": "user", "type": "string", "enum": [ "user", "root" ] } }, "required": [ "mysqlId", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.move": { "post": { "operationId": "mysql-move", "summary": "Move a MySQL database to another environment", "description": "Moves the MySQL database to a different environment within the same project.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "mysqlId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.rebuild": { "post": { "operationId": "mysql-rebuild", "summary": "Rebuild a MySQL database", "description": "Rebuilds the MySQL database Docker container from scratch, pulling the latest image and recreating the service.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "mysqlId": { "type": "string" } }, "required": [ "mysqlId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.search": { "get": { "operationId": "mysql-search", "summary": "Search MySQL databases", "description": "Returns a paginated list of MySQL databases matching the given filters. Supports searching by name, appName, description, project, and environment.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/mysql.readLogs": { "get": { "operationId": "mysql-readLogs", "summary": "Read MySQL container logs", "description": "Retrieves the Docker container logs for the specified MySQL database, with support for tail count, time-based filtering, and text search.", "tags": [ "mysql" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "mysqlId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createSlack": { "post": { "operationId": "notification-createSlack", "summary": "Create Slack notification", "description": "Creates a new Slack notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 }, "channel": { "type": "string" } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "webhookUrl", "channel" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateSlack": { "post": { "operationId": "notification-updateSlack", "summary": "Update Slack notification", "description": "Updates an existing Slack notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 }, "channel": { "type": "string" }, "notificationId": { "type": "string", "minLength": 1 }, "slackId": { "type": "string" }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "slackId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testSlackConnection": { "post": { "operationId": "notification-testSlackConnection", "summary": "Test Slack connection", "description": "Sends a test message to the configured Slack channel to verify the webhook connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "type": "string", "minLength": 1 }, "channel": { "type": "string" } }, "required": [ "webhookUrl", "channel" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createTelegram": { "post": { "operationId": "notification-createTelegram", "summary": "Create Telegram notification", "description": "Creates a new Telegram notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "botToken": { "type": "string", "minLength": 1 }, "chatId": { "type": "string", "minLength": 1 }, "messageThreadId": { "type": "string" } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "botToken", "chatId", "messageThreadId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateTelegram": { "post": { "operationId": "notification-updateTelegram", "summary": "Update Telegram notification", "description": "Updates an existing Telegram notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "botToken": { "type": "string", "minLength": 1 }, "chatId": { "type": "string", "minLength": 1 }, "messageThreadId": { "type": "string" }, "notificationId": { "type": "string", "minLength": 1 }, "telegramId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "telegramId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testTelegramConnection": { "post": { "operationId": "notification-testTelegramConnection", "summary": "Test Telegram connection", "description": "Sends a test message to the configured Telegram chat to verify the bot token and chat ID work.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "botToken": { "type": "string", "minLength": 1 }, "chatId": { "type": "string", "minLength": 1 }, "messageThreadId": { "type": "string" } }, "required": [ "botToken", "chatId", "messageThreadId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createDiscord": { "post": { "operationId": "notification-createDiscord", "summary": "Create Discord notification", "description": "Creates a new Discord notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 }, "decoration": { "type": "boolean" } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "webhookUrl", "decoration" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateDiscord": { "post": { "operationId": "notification-updateDiscord", "summary": "Update Discord notification", "description": "Updates an existing Discord notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 }, "decoration": { "type": "boolean" }, "notificationId": { "type": "string", "minLength": 1 }, "discordId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "discordId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testDiscordConnection": { "post": { "operationId": "notification-testDiscordConnection", "summary": "Test Discord connection", "description": "Sends a test embed message to the configured Discord webhook to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "type": "string", "minLength": 1 }, "decoration": { "type": "boolean" } }, "required": [ "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createEmail": { "post": { "operationId": "notification-createEmail", "summary": "Create Email notification", "description": "Creates a new SMTP email notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "smtpServer": { "type": "string", "minLength": 1 }, "smtpPort": { "type": "number", "minimum": 1 }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 }, "fromAddress": { "type": "string", "minLength": 1 }, "toAddresses": { "minItems": 1, "type": "array", "items": { "type": "string" } } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "smtpServer", "smtpPort", "username", "password", "fromAddress", "toAddresses" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateEmail": { "post": { "operationId": "notification-updateEmail", "summary": "Update Email notification", "description": "Updates an existing SMTP email notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "smtpServer": { "type": "string", "minLength": 1 }, "smtpPort": { "type": "number", "minimum": 1 }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 }, "fromAddress": { "type": "string", "minLength": 1 }, "toAddresses": { "minItems": 1, "type": "array", "items": { "type": "string" } }, "notificationId": { "type": "string", "minLength": 1 }, "emailId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "emailId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testEmailConnection": { "post": { "operationId": "notification-testEmailConnection", "summary": "Test Email connection", "description": "Sends a test email via the configured SMTP settings to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "smtpServer": { "type": "string", "minLength": 1 }, "smtpPort": { "type": "number", "minimum": 1 }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 }, "toAddresses": { "minItems": 1, "type": "array", "items": { "type": "string" } }, "fromAddress": { "type": "string", "minLength": 1 } }, "required": [ "smtpServer", "smtpPort", "username", "password", "toAddresses", "fromAddress" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createResend": { "post": { "operationId": "notification-createResend", "summary": "Create Resend notification", "description": "Creates a new Resend email notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "apiKey": { "type": "string", "minLength": 1 }, "fromAddress": { "type": "string", "minLength": 1 }, "toAddresses": { "minItems": 1, "type": "array", "items": { "type": "string" } } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "apiKey", "fromAddress", "toAddresses" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateResend": { "post": { "operationId": "notification-updateResend", "summary": "Update Resend notification", "description": "Updates an existing Resend email notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "apiKey": { "type": "string", "minLength": 1 }, "fromAddress": { "type": "string", "minLength": 1 }, "toAddresses": { "minItems": 1, "type": "array", "items": { "type": "string" } }, "notificationId": { "type": "string", "minLength": 1 }, "resendId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "resendId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testResendConnection": { "post": { "operationId": "notification-testResendConnection", "summary": "Test Resend connection", "description": "Sends a test email via Resend to verify the API key and configuration work.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "apiKey": { "type": "string", "minLength": 1 }, "fromAddress": { "type": "string", "minLength": 1 }, "toAddresses": { "minItems": 1, "type": "array", "items": { "type": "string" } } }, "required": [ "apiKey", "fromAddress", "toAddresses" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.remove": { "post": { "operationId": "notification-remove", "summary": "Delete notification", "description": "Removes a notification provider by ID. Verifies organization ownership and logs an audit event before deletion.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "notificationId": { "type": "string", "minLength": 1 } }, "required": [ "notificationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.one": { "get": { "operationId": "notification-one", "summary": "Get notification", "description": "Returns a single notification provider by ID. Verifies the caller belongs to the same organization.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "notificationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.all": { "get": { "operationId": "notification-all", "summary": "List all notifications", "description": "Returns all notification providers for the current organization, including all provider-specific details (Slack, Telegram, Discord, etc.).", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.receiveNotification": { "post": { "operationId": "notification-receiveNotification", "summary": "Receive server threshold notification", "description": "Public endpoint that receives CPU/memory threshold alerts from Dokploy or remote servers. Validates the token and dispatches notifications to all configured providers.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "ServerType": { "default": "Dokploy", "type": "string", "enum": [ "Dokploy", "Remote" ] }, "Type": { "type": "string", "enum": [ "Memory", "CPU" ] }, "Value": { "type": "number" }, "Threshold": { "type": "number" }, "Message": { "type": "string" }, "Timestamp": { "type": "string" }, "Token": { "type": "string" } }, "required": [ "Type", "Value", "Threshold", "Message", "Timestamp", "Token" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createGotify": { "post": { "operationId": "notification-createGotify", "summary": "Create Gotify notification", "description": "Creates a new Gotify notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverUrl": { "type": "string", "minLength": 1 }, "appToken": { "type": "string", "minLength": 1 }, "priority": { "type": "number", "minimum": 1 }, "decoration": { "type": "boolean" } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverUrl", "appToken", "priority", "decoration" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateGotify": { "post": { "operationId": "notification-updateGotify", "summary": "Update Gotify notification", "description": "Updates an existing Gotify notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverUrl": { "type": "string", "minLength": 1 }, "appToken": { "type": "string", "minLength": 1 }, "priority": { "type": "number", "minimum": 1 }, "decoration": { "type": "boolean" }, "notificationId": { "type": "string", "minLength": 1 }, "gotifyId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "gotifyId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testGotifyConnection": { "post": { "operationId": "notification-testGotifyConnection", "summary": "Test Gotify connection", "description": "Sends a test notification to the configured Gotify server to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverUrl": { "type": "string", "minLength": 1 }, "appToken": { "type": "string", "minLength": 1 }, "priority": { "type": "number", "minimum": 1 }, "decoration": { "type": "boolean" } }, "required": [ "serverUrl", "appToken", "priority" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createNtfy": { "post": { "operationId": "notification-createNtfy", "summary": "Create ntfy notification", "description": "Creates a new ntfy notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverUrl": { "type": "string", "minLength": 1 }, "topic": { "type": "string", "minLength": 1 }, "accessToken": { "type": "string" }, "priority": { "type": "number", "minimum": 1 } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverUrl", "topic", "accessToken", "priority" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateNtfy": { "post": { "operationId": "notification-updateNtfy", "summary": "Update ntfy notification", "description": "Updates an existing ntfy notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverUrl": { "type": "string", "minLength": 1 }, "topic": { "type": "string", "minLength": 1 }, "accessToken": { "type": "string" }, "priority": { "type": "number", "minimum": 1 }, "notificationId": { "type": "string", "minLength": 1 }, "ntfyId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "ntfyId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testNtfyConnection": { "post": { "operationId": "notification-testNtfyConnection", "summary": "Test ntfy connection", "description": "Sends a test notification to the configured ntfy topic to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverUrl": { "type": "string", "minLength": 1 }, "topic": { "type": "string", "minLength": 1 }, "accessToken": { "type": "string" }, "priority": { "type": "number", "minimum": 1 } }, "required": [ "serverUrl", "topic", "accessToken", "priority" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createMattermost": { "post": { "operationId": "notification-createMattermost", "summary": "Create Mattermost notification", "description": "Creates a new Mattermost notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "format": "uri" }, "channel": { "type": "string" }, "username": { "type": "string" } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateMattermost": { "post": { "operationId": "notification-updateMattermost", "summary": "Update Mattermost notification", "description": "Updates an existing Mattermost notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "format": "uri" }, "channel": { "type": "string" }, "username": { "type": "string" }, "notificationId": { "type": "string", "minLength": 1 }, "mattermostId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "mattermostId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testMattermostConnection": { "post": { "operationId": "notification-testMattermostConnection", "summary": "Test Mattermost connection", "description": "Sends a test message to the configured Mattermost webhook to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "type": "string", "format": "uri" }, "channel": { "type": "string" }, "username": { "type": "string" } }, "required": [ "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createCustom": { "post": { "operationId": "notification-createCustom", "summary": "Create custom webhook notification", "description": "Creates a new custom webhook notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "endpoint": { "type": "string", "minLength": 1 }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "required": [ "name", "endpoint" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateCustom": { "post": { "operationId": "notification-updateCustom", "summary": "Update custom webhook notification", "description": "Updates an existing custom webhook notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "endpoint": { "type": "string", "minLength": 1 }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "notificationId": { "type": "string", "minLength": 1 }, "customId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "customId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testCustomConnection": { "post": { "operationId": "notification-testCustomConnection", "summary": "Test custom webhook connection", "description": "Sends a test payload to the configured custom webhook URL to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "endpoint": { "type": "string", "minLength": 1 }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "required": [ "endpoint" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createLark": { "post": { "operationId": "notification-createLark", "summary": "Create Lark notification", "description": "Creates a new Lark notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateLark": { "post": { "operationId": "notification-updateLark", "summary": "Update Lark notification", "description": "Updates an existing Lark notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 }, "notificationId": { "type": "string", "minLength": 1 }, "larkId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "larkId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testLarkConnection": { "post": { "operationId": "notification-testLarkConnection", "summary": "Test Lark connection", "description": "Sends a test message to the configured Lark webhook to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "type": "string", "minLength": 1 } }, "required": [ "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createTeams": { "post": { "operationId": "notification-createTeams", "summary": "Create Teams notification", "description": "Creates a new Microsoft Teams notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 } }, "required": [ "appBuildError", "databaseBackup", "dokployBackup", "volumeBackup", "dokployRestart", "name", "appDeploy", "dockerCleanup", "serverThreshold", "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updateTeams": { "post": { "operationId": "notification-updateTeams", "summary": "Update Teams notification", "description": "Updates an existing Microsoft Teams notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "webhookUrl": { "type": "string", "minLength": 1 }, "notificationId": { "type": "string", "minLength": 1 }, "teamsId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" } }, "required": [ "notificationId", "teamsId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testTeamsConnection": { "post": { "operationId": "notification-testTeamsConnection", "summary": "Test Teams connection", "description": "Sends a test message to the configured Microsoft Teams webhook to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "webhookUrl": { "type": "string", "minLength": 1 } }, "required": [ "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.createPushover": { "post": { "operationId": "notification-createPushover", "summary": "Create Pushover notification", "description": "Creates a new Pushover notification provider for the current organization and logs an audit event.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" }, "userKey": { "type": "string", "minLength": 1 }, "apiToken": { "type": "string", "minLength": 1 }, "priority": { "default": 0, "type": "number", "minimum": -2, "maximum": 2 }, "retry": { "anyOf": [ { "type": "number", "minimum": 30 }, { "type": "null" } ] }, "expire": { "anyOf": [ { "type": "number", "minimum": 1, "maximum": 10800 }, { "type": "null" } ] } }, "required": [ "name", "userKey", "apiToken" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.updatePushover": { "post": { "operationId": "notification-updatePushover", "summary": "Update Pushover notification", "description": "Updates an existing Pushover notification provider. Verifies organization ownership before applying changes.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "notificationId": { "type": "string", "minLength": 1 }, "pushoverId": { "type": "string", "minLength": 1 }, "organizationId": { "type": "string" }, "userKey": { "type": "string", "minLength": 1 }, "apiToken": { "type": "string", "minLength": 1 }, "priority": { "type": "number", "minimum": -2, "maximum": 2 }, "retry": { "anyOf": [ { "type": "number", "minimum": 30 }, { "type": "null" } ] }, "expire": { "anyOf": [ { "type": "number", "minimum": 1, "maximum": 10800 }, { "type": "null" } ] }, "appBuildError": { "type": "boolean" }, "databaseBackup": { "type": "boolean" }, "dokployBackup": { "type": "boolean" }, "volumeBackup": { "type": "boolean" }, "dokployRestart": { "type": "boolean" }, "name": { "type": "string" }, "appDeploy": { "type": "boolean" }, "dockerCleanup": { "type": "boolean" }, "serverThreshold": { "type": "boolean" } }, "required": [ "notificationId", "pushoverId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.testPushoverConnection": { "post": { "operationId": "notification-testPushoverConnection", "summary": "Test Pushover connection", "description": "Sends a test notification to the configured Pushover account to verify the connection works.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "userKey": { "type": "string", "minLength": 1 }, "apiToken": { "type": "string", "minLength": 1 }, "priority": { "type": "number", "minimum": -2, "maximum": 2 }, "retry": { "anyOf": [ { "type": "number", "minimum": 30 }, { "type": "null" } ] }, "expire": { "anyOf": [ { "type": "number", "minimum": 1, "maximum": 10800 }, { "type": "null" } ] } }, "required": [ "userKey", "apiToken", "priority" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/notification.getEmailProviders": { "get": { "operationId": "notification-getEmailProviders", "summary": "List email notification providers", "description": "Returns all notification providers that support email (SMTP and Resend) for the current organization.", "tags": [ "notification" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/port.create": { "post": { "operationId": "port-create", "summary": "Create a port", "description": "Creates a new port mapping for an application, binding a published port to a target port. Logs an audit entry.", "tags": [ "port" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "publishedPort": { "type": "number" }, "publishMode": { "default": "ingress", "type": "string", "enum": [ "ingress", "host" ] }, "targetPort": { "type": "number" }, "protocol": { "default": "tcp", "type": "string", "enum": [ "tcp", "udp" ] }, "applicationId": { "type": "string", "minLength": 1 } }, "required": [ "publishedPort", "publishMode", "targetPort", "protocol", "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/port.one": { "get": { "operationId": "port-one", "summary": "Get a port", "description": "Returns a single port mapping by its ID, including the associated application details.", "tags": [ "port" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "portId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/port.delete": { "post": { "operationId": "port-delete", "summary": "Delete a port", "description": "Deletes a port mapping by its ID and logs an audit entry with the published and target port details.", "tags": [ "port" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "portId": { "type": "string", "minLength": 1 } }, "required": [ "portId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/port.update": { "post": { "operationId": "port-update", "summary": "Update a port", "description": "Updates an existing port mapping's configuration and logs an audit entry.", "tags": [ "port" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "portId": { "type": "string", "minLength": 1 }, "publishedPort": { "type": "number" }, "publishMode": { "default": "ingress", "type": "string", "enum": [ "ingress", "host" ] }, "targetPort": { "type": "number" }, "protocol": { "default": "tcp", "type": "string", "enum": [ "tcp", "udp" ] } }, "required": [ "portId", "publishedPort", "publishMode", "targetPort", "protocol" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.create": { "post": { "operationId": "postgres-create", "summary": "Create a PostgreSQL database", "description": "Creates a new PostgreSQL database service with the specified configuration, sets up a persistent data volume, and registers it in the project.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "databaseName": { "type": "string", "minLength": 1 }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "dockerImage": { "default": "postgres:18", "type": "string" }, "environmentId": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "databaseName", "databaseUser", "databasePassword", "environmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.one": { "get": { "operationId": "postgres-one", "summary": "Get a PostgreSQL database by ID", "description": "Returns the full details of a PostgreSQL database service, including its environment and project configuration.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "postgresId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.start": { "post": { "operationId": "postgres-start", "summary": "Start a PostgreSQL database", "description": "Starts the Docker container for the specified PostgreSQL database and sets its status to done.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string", "minLength": 1 } }, "required": [ "postgresId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.stop": { "post": { "operationId": "postgres-stop", "summary": "Stop a PostgreSQL database", "description": "Stops the Docker container for the specified PostgreSQL database and sets its status to idle.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string", "minLength": 1 } }, "required": [ "postgresId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.saveExternalPort": { "post": { "operationId": "postgres-saveExternalPort", "summary": "Save the external port for a PostgreSQL database", "description": "Updates the external port mapping for the PostgreSQL database and triggers a redeployment. Validates that the port is not already in use.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "postgresId", "externalPort" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.deploy": { "post": { "operationId": "postgres-deploy", "summary": "Deploy a PostgreSQL database", "description": "Triggers a deployment for the specified PostgreSQL database, rebuilding and restarting its Docker container with the current configuration.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" } }, "required": [ "postgresId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.changeStatus": { "post": { "operationId": "postgres-changeStatus", "summary": "Change PostgreSQL database status", "description": "Updates the application status of a PostgreSQL database without starting or stopping the container.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] } }, "required": [ "postgresId", "applicationStatus" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.remove": { "post": { "operationId": "postgres-remove", "summary": "Delete a PostgreSQL database", "description": "Removes the PostgreSQL database service, its Docker container, cancels associated backup jobs, and deletes the database record.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string", "minLength": 1 } }, "required": [ "postgresId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.saveEnvironment": { "post": { "operationId": "postgres-saveEnvironment", "summary": "Save environment variables for a PostgreSQL database", "description": "Updates the environment variables for the specified PostgreSQL database service.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "postgresId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.reload": { "post": { "operationId": "postgres-reload", "summary": "Reload a PostgreSQL database", "description": "Restarts the PostgreSQL database by stopping and then starting its Docker container.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" } }, "required": [ "postgresId", "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.update": { "post": { "operationId": "postgres-update", "summary": "Update a PostgreSQL database", "description": "Updates the configuration of an existing PostgreSQL database service.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "databaseName": { "type": "string", "minLength": 1 }, "databaseUser": { "type": "string", "minLength": 1 }, "databasePassword": { "type": "string", "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "dockerImage": { "type": "string" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "args": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "ulimitsSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Name": { "type": "string", "minLength": 1 }, "Soft": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 }, "Hard": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 } }, "required": [ "Name", "Soft", "Hard" ], "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "createdAt": { "type": "string" }, "environmentId": { "type": "string" } }, "required": [ "postgresId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.changePassword": { "post": { "operationId": "postgres-changePassword", "summary": "Change PostgreSQL database password", "description": "Changes the password for the PostgreSQL database user by executing ALTER USER inside the running container and updating the stored password.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" } }, "required": [ "postgresId", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.move": { "post": { "operationId": "postgres-move", "summary": "Move a PostgreSQL database to another environment", "description": "Moves the PostgreSQL database to a different environment within the same project.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "postgresId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.rebuild": { "post": { "operationId": "postgres-rebuild", "summary": "Rebuild a PostgreSQL database", "description": "Rebuilds the PostgreSQL database Docker container from scratch, pulling the latest image and recreating the service.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "postgresId": { "type": "string" } }, "required": [ "postgresId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.search": { "get": { "operationId": "postgres-search", "summary": "Search PostgreSQL databases", "description": "Returns a paginated list of PostgreSQL databases matching the given filters. Supports searching by name, appName, description, project, and environment.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/postgres.readLogs": { "get": { "operationId": "postgres-readLogs", "summary": "Read PostgreSQL container logs", "description": "Retrieves the Docker container logs for the specified PostgreSQL database, with support for tail count, time-based filtering, and text search.", "tags": [ "postgres" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "postgresId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/previewDeployment.all": { "get": { "operationId": "previewDeployment-all", "summary": "List preview deployments", "description": "Returns all preview deployments associated with the given application.", "tags": [ "previewDeployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "applicationId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/previewDeployment.one": { "get": { "operationId": "previewDeployment-one", "summary": "Get a preview deployment", "description": "Returns the details of a specific preview deployment by its ID.", "tags": [ "previewDeployment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "previewDeploymentId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/previewDeployment.delete": { "post": { "operationId": "previewDeployment-delete", "summary": "Delete a preview deployment", "description": "Permanently removes a preview deployment and its associated resources.", "tags": [ "previewDeployment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "previewDeploymentId": { "type": "string" } }, "required": [ "previewDeploymentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/previewDeployment.redeploy": { "post": { "operationId": "previewDeployment-redeploy", "summary": "Redeploy a preview deployment", "description": "Triggers a rebuild of an existing preview deployment by adding a new job to the deployment queue.", "tags": [ "previewDeployment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "previewDeploymentId": { "type": "string" }, "title": { "type": "string" }, "description": { "type": "string" } }, "required": [ "previewDeploymentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.create": { "post": { "operationId": "project-create", "summary": "Create a project", "description": "Creates a new project in the current organization with a default environment. Validates server availability for cloud deployments.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "env": { "type": "string" } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.one": { "get": { "operationId": "project-one", "summary": "Get a project", "description": "Retrieves a project by its ID with all environments and services. Filters services based on the user's access permissions.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "projectId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.all": { "get": { "operationId": "project-all", "summary": "List all projects", "description": "Returns all projects in the current organization with their environments and services. Filters results based on the user's access permissions.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.allForPermissions": { "get": { "operationId": "project-allForPermissions", "summary": "List all projects for permissions", "description": "Returns all projects with their environments and services for the permissions management UI. Requires member update permission.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.search": { "get": { "operationId": "project-search", "summary": "Search projects", "description": "Searches projects by name or description with pagination. Respects project-level access control for non-admin users.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.remove": { "post": { "operationId": "project-remove", "summary": "Delete a project", "description": "Permanently deletes a project and all its associated environments, services, and resources.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectId": { "type": "string", "minLength": 1 } }, "required": [ "projectId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.update": { "post": { "operationId": "project-update", "summary": "Update a project", "description": "Updates a project's name, description, or environment variables. Validates organization ownership and project-level access permissions.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "organizationId": { "type": "string" }, "env": { "type": "string" } }, "required": [ "projectId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/project.duplicate": { "post": { "operationId": "project-duplicate", "summary": "Duplicate a project or environment", "description": "Duplicates services from a source environment into a new project or into the same project. Copies applications, compose services, databases, and their associated domains, mounts, ports, and backups.", "tags": [ "project" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "sourceEnvironmentId": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "includeServices": { "default": true, "type": "boolean" }, "selectedServices": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "application", "compose", "libsql", "mariadb", "mongo", "mysql", "postgres", "redis" ] } }, "required": [ "id", "type" ] } }, "duplicateInSameProject": { "default": false, "type": "boolean" } }, "required": [ "sourceEnvironmentId", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redirects.create": { "post": { "operationId": "redirects-create", "summary": "Create a redirect", "description": "Creates a new redirect rule for an application using a regex pattern. Logs an audit entry.", "tags": [ "redirects" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "regex": { "type": "string", "minLength": 1 }, "replacement": { "type": "string", "minLength": 1 }, "permanent": { "type": "boolean" }, "applicationId": { "type": "string" } }, "required": [ "regex", "replacement", "permanent", "applicationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redirects.one": { "get": { "operationId": "redirects-one", "summary": "Get a redirect", "description": "Returns a single redirect rule by its ID.", "tags": [ "redirects" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "redirectId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redirects.delete": { "post": { "operationId": "redirects-delete", "summary": "Delete a redirect", "description": "Deletes a redirect rule by its ID and logs an audit entry.", "tags": [ "redirects" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redirectId": { "type": "string", "minLength": 1 } }, "required": [ "redirectId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redirects.update": { "post": { "operationId": "redirects-update", "summary": "Update a redirect", "description": "Updates an existing redirect rule's configuration and logs an audit entry.", "tags": [ "redirects" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redirectId": { "type": "string", "minLength": 1 }, "regex": { "type": "string", "minLength": 1 }, "replacement": { "type": "string", "minLength": 1 }, "permanent": { "type": "boolean" } }, "required": [ "redirectId", "regex", "replacement", "permanent" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.create": { "post": { "operationId": "redis-create", "summary": "Create a Redis database", "description": "Creates a new Redis database service with the specified configuration, sets up a persistent data volume, and registers it in the project.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "databasePassword": { "type": "string" }, "dockerImage": { "default": "redis:8", "type": "string" }, "environmentId": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name", "databasePassword", "environmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.one": { "get": { "operationId": "redis-one", "summary": "Get a Redis database by ID", "description": "Returns the full details of a Redis database service, including its environment and project configuration.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "redisId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.start": { "post": { "operationId": "redis-start", "summary": "Start a Redis database", "description": "Starts the Docker container for the specified Redis database and sets its status to done.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string", "minLength": 1 } }, "required": [ "redisId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.reload": { "post": { "operationId": "redis-reload", "summary": "Reload a Redis database", "description": "Restarts the Redis database by stopping and then starting its Docker container.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" } }, "required": [ "redisId", "appName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.stop": { "post": { "operationId": "redis-stop", "summary": "Stop a Redis database", "description": "Stops the Docker container for the specified Redis database and sets its status to idle.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string", "minLength": 1 } }, "required": [ "redisId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.saveExternalPort": { "post": { "operationId": "redis-saveExternalPort", "summary": "Save the external port for a Redis database", "description": "Updates the external port mapping for the Redis database and triggers a redeployment. Validates that the port is not already in use.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "redisId", "externalPort" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.deploy": { "post": { "operationId": "redis-deploy", "summary": "Deploy a Redis database", "description": "Triggers a deployment for the specified Redis database, rebuilding and restarting its Docker container with the current configuration.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" } }, "required": [ "redisId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.changeStatus": { "post": { "operationId": "redis-changeStatus", "summary": "Change Redis database status", "description": "Updates the application status of a Redis database without starting or stopping the container.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] } }, "required": [ "redisId", "applicationStatus" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.remove": { "post": { "operationId": "redis-remove", "summary": "Delete a Redis database", "description": "Removes the Redis database service, its Docker container, and deletes the database record.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string", "minLength": 1 } }, "required": [ "redisId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.saveEnvironment": { "post": { "operationId": "redis-saveEnvironment", "summary": "Save environment variables for a Redis database", "description": "Updates the environment variables for the specified Redis database service.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "redisId", "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.update": { "post": { "operationId": "redis-update", "summary": "Update a Redis database", "description": "Updates the configuration of an existing Redis database service.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "appName": { "type": "string", "minLength": 1, "maxLength": 63, "pattern": "^[a-zA-Z0-9._-]+$" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "databasePassword": { "type": "string" }, "dockerImage": { "type": "string" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "args": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "env": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "memoryLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuReservation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "cpuLimit": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalPort": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "applicationStatus": { "type": "string", "enum": [ "idle", "running", "done", "error" ] }, "healthCheckSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Test": { "type": "array", "items": { "type": "string" } }, "Interval": { "type": "number" }, "Timeout": { "type": "number" }, "StartPeriod": { "type": "number" }, "Retries": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "restartPolicySwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Condition": { "type": "string" }, "Delay": { "type": "number" }, "MaxAttempts": { "type": "number" }, "Window": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "placementSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Constraints": { "type": "array", "items": { "type": "string" } }, "Preferences": { "type": "array", "items": { "type": "object", "properties": { "Spread": { "type": "object", "properties": { "SpreadDescriptor": { "type": "string" } }, "required": [ "SpreadDescriptor" ] } }, "required": [ "Spread" ], "additionalProperties": false } }, "MaxReplicas": { "type": "number" }, "Platforms": { "type": "array", "items": { "type": "object", "properties": { "Architecture": { "type": "string" }, "OS": { "type": "string" } }, "required": [ "Architecture", "OS" ], "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "updateConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "rollbackConfigSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Parallelism": { "type": "number" }, "Delay": { "type": "number" }, "FailureAction": { "type": "string" }, "Monitor": { "type": "number" }, "MaxFailureRatio": { "type": "number" }, "Order": { "type": "string" } }, "required": [ "Parallelism", "Order" ], "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "modeSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Replicated": { "type": "object", "properties": { "Replicas": { "type": "number" } }, "additionalProperties": false }, "Global": { "type": "object", "properties": {} }, "ReplicatedJob": { "type": "object", "properties": { "MaxConcurrent": { "type": "number" }, "TotalCompletions": { "type": "number" } }, "additionalProperties": false }, "GlobalJob": { "type": "object", "properties": {} } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "labelsSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, { "type": "null" } ] }, { "type": "null" } ] }, "networkSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Target": { "type": "string" }, "Aliases": { "type": "array", "items": { "type": "string" } }, "DriverOpts": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "stopGracePeriodSwarm": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, { "type": "null" } ] }, "endpointSpecSwarm": { "anyOf": [ { "anyOf": [ { "type": "object", "properties": { "Mode": { "type": "string" }, "Ports": { "type": "array", "items": { "type": "object", "properties": { "Protocol": { "type": "string" }, "TargetPort": { "type": "number" }, "PublishedPort": { "type": "number" }, "PublishMode": { "type": "string" } }, "additionalProperties": false } } }, "additionalProperties": false }, { "type": "null" } ] }, { "type": "null" } ] }, "ulimitsSwarm": { "anyOf": [ { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "Name": { "type": "string", "minLength": 1 }, "Soft": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 }, "Hard": { "type": "integer", "minimum": -1, "maximum": 9007199254740991 } }, "required": [ "Name", "Soft", "Hard" ], "additionalProperties": false } }, { "type": "null" } ] }, { "type": "null" } ] }, "replicas": { "type": "number" }, "environmentId": { "type": "string" } }, "required": [ "redisId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.changePassword": { "post": { "operationId": "redis-changePassword", "summary": "Change Redis database password", "description": "Changes the password for the Redis database by executing CONFIG SET requirepass inside the running container and updating the stored password.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9@#%^&*()_+\\-=[\\]{}|;:,.<>?~`]*$" } }, "required": [ "redisId", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.move": { "post": { "operationId": "redis-move", "summary": "Move a Redis database to another environment", "description": "Moves the Redis database to a different environment within the same project.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" }, "targetEnvironmentId": { "type": "string" } }, "required": [ "redisId", "targetEnvironmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.rebuild": { "post": { "operationId": "redis-rebuild", "summary": "Rebuild a Redis database", "description": "Rebuilds the Redis database Docker container from scratch, pulling the latest image and recreating the service.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redisId": { "type": "string" } }, "required": [ "redisId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.search": { "get": { "operationId": "redis-search", "summary": "Search Redis databases", "description": "Returns a paginated list of Redis databases matching the given filters. Supports searching by name, appName, description, project, and environment.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "appName", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "environmentId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/redis.readLogs": { "get": { "operationId": "redis-readLogs", "summary": "Read Redis container logs", "description": "Retrieves the Docker container logs for the specified Redis database, with support for tail count, time-based filtering, and text search.", "tags": [ "redis" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "redisId", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "tail", "schema": { "default": 100, "type": "integer", "minimum": 1, "maximum": 10000 } }, { "in": "query", "name": "since", "schema": { "default": "all", "type": "string", "pattern": "^(all|\\d+[smhd])$" } }, { "in": "query", "name": "search", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9 ._-]{0,500}$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.create": { "post": { "operationId": "registry-create", "summary": "Create registry", "description": "Creates a new Docker registry entry for the current organization and logs an audit event.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "registryName": { "type": "string", "minLength": 1 }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 }, "registryUrl": { "type": "string" }, "registryType": { "type": "string", "enum": [ "cloud" ] }, "imagePrefix": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "type": "string" } }, "required": [ "registryName", "username", "password", "registryUrl", "registryType", "imagePrefix" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.remove": { "post": { "operationId": "registry-remove", "summary": "Delete registry", "description": "Removes a Docker registry entry by ID. Verifies organization ownership and logs an audit event before deletion.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "registryId": { "type": "string", "minLength": 1 } }, "required": [ "registryId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.update": { "post": { "operationId": "registry-update", "summary": "Update registry", "description": "Updates an existing Docker registry entry. Verifies organization ownership before applying changes and logs an audit event.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "registryId": { "type": "string", "minLength": 1 }, "registryName": { "type": "string", "minLength": 1 }, "imagePrefix": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, { "type": "null" } ] }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 }, "registryUrl": { "type": "string" }, "createdAt": { "type": "string" }, "registryType": { "type": "string", "enum": [ "cloud" ] }, "organizationId": { "type": "string", "minLength": 1 }, "serverId": { "type": "string" } }, "required": [ "registryId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.all": { "get": { "operationId": "registry-all", "summary": "List all registries", "description": "Returns all Docker registry entries for the current organization.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.one": { "get": { "operationId": "registry-one", "summary": "Get registry", "description": "Returns a single Docker registry entry by ID. Verifies the caller belongs to the same organization.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "registryId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.testRegistry": { "post": { "operationId": "registry-testRegistry", "summary": "Test registry credentials", "description": "Attempts a docker login with the provided credentials to verify the registry URL, username, and password are valid. Can run locally or on a remote server.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "registryName": { "type": "string" }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 }, "registryUrl": { "type": "string" }, "registryType": { "type": "string", "enum": [ "cloud" ] }, "imagePrefix": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "type": "string" } }, "required": [ "username", "password", "registryUrl", "registryType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/registry.testRegistryById": { "post": { "operationId": "registry-testRegistryById", "summary": "Test registry connection by ID", "description": "Looks up a saved registry by ID and attempts a docker login with its stored credentials. Verifies organization ownership before testing.", "tags": [ "registry" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "registryId": { "type": "string", "minLength": 1 }, "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/security.create": { "post": { "operationId": "security-create", "summary": "Create a security entry", "description": "Creates a new HTTP basic auth security entry for an application with the provided username and password. Logs an audit entry.", "tags": [ "security" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "applicationId": { "type": "string" }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 } }, "required": [ "applicationId", "username", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/security.one": { "get": { "operationId": "security-one", "summary": "Get a security entry", "description": "Returns a single HTTP basic auth security entry by its ID.", "tags": [ "security" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "securityId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/security.delete": { "post": { "operationId": "security-delete", "summary": "Delete a security entry", "description": "Deletes an HTTP basic auth security entry by its ID and logs an audit entry.", "tags": [ "security" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "securityId": { "type": "string", "minLength": 1 } }, "required": [ "securityId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/security.update": { "post": { "operationId": "security-update", "summary": "Update a security entry", "description": "Updates an existing HTTP basic auth security entry's configuration and logs an audit entry.", "tags": [ "security" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "securityId": { "type": "string", "minLength": 1 }, "username": { "type": "string", "minLength": 1 }, "password": { "type": "string", "minLength": 1 } }, "required": [ "securityId", "username", "password" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.create": { "post": { "operationId": "server-create", "summary": "Create a server", "description": "Creates a new server in the organization. In cloud mode, enforces the user's server quantity limit. Returns the newly created server.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "ipAddress": { "type": "string" }, "port": { "type": "number" }, "username": { "type": "string" }, "sshKeyId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverType": { "type": "string", "enum": [ "deploy", "build" ] } }, "required": [ "name", "description", "ipAddress", "port", "username", "sshKeyId", "serverType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.one": { "get": { "operationId": "server-one", "summary": "Get a server", "description": "Retrieves a single server by its ID. Validates that the user has access to the server within their organization.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.getDefaultCommand": { "get": { "operationId": "server-getDefaultCommand", "summary": "Get default server command", "description": "Returns the default setup command for a server. The command varies depending on whether the server is a build server or a deploy server.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.all": { "get": { "operationId": "server-all", "summary": "List all servers", "description": "Returns all servers in the current organization along with a count of associated services (applications, compose, databases). Results are filtered by the user's accessible server permissions.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.allForPermissions": { "get": { "operationId": "server-allForPermissions", "summary": "List all servers for permissions", "description": "Returns a minimal list of servers (ID, name, IP, type) used for configuring member permissions. Requires a valid enterprise license.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.count": { "get": { "operationId": "server-count", "summary": "Get server count", "description": "Returns the total number of servers across all organizations owned by the current user.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.withSSHKey": { "get": { "operationId": "server-withSSHKey", "summary": "List servers with SSH keys", "description": "Returns all deploy-type servers that have an SSH key configured. In cloud mode, only active servers are included. Results are filtered by the user's accessible server permissions.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.buildServers": { "get": { "operationId": "server-buildServers", "summary": "List build servers", "description": "Returns all build-type servers that have an SSH key configured. In cloud mode, only active servers are included. Results are filtered by the user's accessible server permissions.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.setup": { "post": { "operationId": "server-setup", "summary": "Setup a server", "description": "Runs the initial setup process on a remote server, installing required dependencies and configuring Docker. An audit log entry is created.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string", "minLength": 1 } }, "required": [ "serverId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.validate": { "get": { "operationId": "server-validate", "summary": "Validate server configuration", "description": "Checks the server for required tools and configuration including Docker, Rclone, Nixpacks, Buildpacks, Railpack, Swarm mode, network setup, and privilege mode.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.security": { "get": { "operationId": "server-security", "summary": "Get server security audit", "description": "Performs a security audit on the server, checking UFW firewall, SSH configuration, non-root user setup, unattended upgrades, and Fail2Ban status.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.setupMonitoring": { "post": { "operationId": "server-setupMonitoring", "summary": "Setup server monitoring", "description": "Configures and deploys the monitoring agent on a server with the specified metrics configuration including refresh rates, retention, thresholds, and container service filters.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string", "minLength": 1 }, "metricsConfig": { "type": "object", "properties": { "server": { "type": "object", "properties": { "refreshRate": { "type": "number", "minimum": 2 }, "port": { "type": "number", "minimum": 1 }, "token": { "type": "string" }, "urlCallback": { "type": "string", "format": "uri" }, "retentionDays": { "type": "number", "minimum": 1 }, "cronJob": { "type": "string", "minLength": 1 }, "thresholds": { "type": "object", "properties": { "cpu": { "type": "number", "minimum": 0 }, "memory": { "type": "number", "minimum": 0 } }, "required": [ "cpu", "memory" ] } }, "required": [ "refreshRate", "port", "token", "urlCallback", "retentionDays", "cronJob", "thresholds" ] }, "containers": { "type": "object", "properties": { "refreshRate": { "type": "number", "minimum": 2 }, "services": { "type": "object", "properties": { "include": { "type": "array", "items": { "type": "string" } }, "exclude": { "type": "array", "items": { "type": "string" } } } } }, "required": [ "refreshRate", "services" ] } }, "required": [ "server", "containers" ] } }, "required": [ "serverId", "metricsConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.remove": { "post": { "operationId": "server-remove", "summary": "Remove a server", "description": "Deletes a server and removes all associated deployments. Fails if the server has active services. In cloud mode, updates the user's server quantity allocation.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string", "minLength": 1 } }, "required": [ "serverId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.update": { "post": { "operationId": "server-update", "summary": "Update a server", "description": "Updates the configuration of an existing server. Fails if the server is inactive. An audit log entry is created for the update.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "type": "string", "minLength": 1 }, "ipAddress": { "type": "string" }, "port": { "type": "number" }, "username": { "type": "string" }, "sshKeyId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverType": { "type": "string", "enum": [ "deploy", "build" ] }, "command": { "type": "string" } }, "required": [ "name", "description", "serverId", "ipAddress", "port", "username", "sshKeyId", "serverType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.publicIp": { "get": { "operationId": "server-publicIp", "summary": "Get public IP address", "description": "Returns the public IP address of the local server. Returns an empty string in cloud mode.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.getServerTime": { "get": { "operationId": "server-getServerTime", "summary": "Get server time", "description": "Returns the current server time and timezone. Returns null in cloud mode.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/server.getServerMetrics": { "get": { "operationId": "server-getServerMetrics", "summary": "Get server metrics", "description": "Fetches monitoring metrics (CPU, memory, disk, network) from the server's monitoring agent endpoint. Requires the monitoring service to be configured and running.", "tags": [ "server" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "url", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "token", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "dataPoints", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getWebServerSettings": { "get": { "operationId": "settings-getWebServerSettings", "summary": "Get web server settings", "description": "Retrieve the current web server settings. Returns null on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.reloadServer": { "post": { "operationId": "settings-reloadServer", "summary": "Reload Dokploy server", "description": "Reload the Dokploy Docker service with the current version. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanRedis": { "post": { "operationId": "settings-cleanRedis", "summary": "Flush Redis data", "description": "Execute FLUSHALL on the Dokploy Redis container, removing all cached data. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.reloadRedis": { "post": { "operationId": "settings-reloadRedis", "summary": "Reload Redis service", "description": "Force-reload the Dokploy Redis Docker service. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanAllDeploymentQueue": { "post": { "operationId": "settings-cleanAllDeploymentQueue", "summary": "Clean all deployment queues", "description": "Remove all pending jobs from the deployment queue. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.reloadTraefik": { "post": { "operationId": "settings-reloadTraefik", "summary": "Reload Traefik service", "description": "Force-reload the Dokploy Traefik Docker service. Runs in the background to avoid proxy timeouts. Optionally targets a specific server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.toggleDashboard": { "post": { "operationId": "settings-toggleDashboard", "summary": "Toggle Traefik dashboard", "description": "Enable or disable the Traefik dashboard by adding or removing port 8080. Checks for port conflicts before enabling. Runs the Traefik setup in the background.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "enableDashboard": { "type": "boolean" }, "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanUnusedImages": { "post": { "operationId": "settings-cleanUnusedImages", "summary": "Clean unused Docker images", "description": "Remove all unused Docker images from the host or a specified server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanUnusedVolumes": { "post": { "operationId": "settings-cleanUnusedVolumes", "summary": "Clean unused Docker volumes", "description": "Remove all unused Docker volumes from the host or a specified server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanStoppedContainers": { "post": { "operationId": "settings-cleanStoppedContainers", "summary": "Clean stopped Docker containers", "description": "Remove all stopped Docker containers from the host or a specified server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanDockerBuilder": { "post": { "operationId": "settings-cleanDockerBuilder", "summary": "Clean Docker build cache", "description": "Remove Docker builder cache from the host or a specified server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanDockerPrune": { "post": { "operationId": "settings-cleanDockerPrune", "summary": "Prune Docker system", "description": "Run a full Docker system prune and builder cache cleanup on the host or a specified server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanAll": { "post": { "operationId": "settings-cleanAll", "summary": "Clean all Docker resources", "description": "Run a comprehensive Docker cleanup (images, containers, volumes, builders, system prune) in the background to avoid gateway timeouts.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanMonitoring": { "post": { "operationId": "settings-cleanMonitoring", "summary": "Clean monitoring data", "description": "Delete and recreate the monitoring data directory, removing all collected metrics. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getDockerDiskUsage": { "get": { "operationId": "settings-getDockerDiskUsage", "summary": "Get Docker disk usage", "description": "Retrieve Docker disk usage statistics. Returns an empty array on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.saveSSHPrivateKey": { "post": { "operationId": "settings-saveSSHPrivateKey", "summary": "Save SSH private key", "description": "Store an SSH private key in the web server settings for remote server access. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "sshPrivateKey": { "type": "string" } }, "required": [ "sshPrivateKey" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.assignDomainServer": { "post": { "operationId": "settings-assignDomainServer", "summary": "Assign domain to server", "description": "Configure the server domain, HTTPS settings, certificate type, and Let's Encrypt email. Updates both web server settings and Traefik configuration. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "host": { "type": "string" }, "certificateType": { "type": "string", "enum": [ "letsencrypt", "none", "custom" ] }, "letsEncryptEmail": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "string", "const": "" } ] }, { "type": "null" } ] }, "https": { "type": "boolean" } }, "required": [ "host", "certificateType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.cleanSSHPrivateKey": { "post": { "operationId": "settings-cleanSSHPrivateKey", "summary": "Remove SSH private key", "description": "Clear the stored SSH private key from web server settings. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateDockerCleanup": { "post": { "operationId": "settings-updateDockerCleanup", "summary": "Update Docker cleanup schedule", "description": "Enable or disable automatic Docker cleanup for a server or the web server. When enabled, schedules a cron job that periodically removes unused Docker resources and sends notifications.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "enableDockerCleanup": { "type": "boolean" }, "serverId": { "type": "string" } }, "required": [ "enableDockerCleanup" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.readTraefikConfig": { "get": { "operationId": "settings-readTraefikConfig", "summary": "Read main Traefik configuration", "description": "Read the main Traefik configuration file. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateTraefikConfig": { "post": { "operationId": "settings-updateTraefikConfig", "summary": "Update main Traefik configuration", "description": "Overwrite the main Traefik configuration file with the provided content. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "traefikConfig": { "type": "string", "minLength": 1 } }, "required": [ "traefikConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.readWebServerTraefikConfig": { "get": { "operationId": "settings-readWebServerTraefikConfig", "summary": "Read web server Traefik configuration", "description": "Read the Dokploy-specific Traefik configuration file. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateWebServerTraefikConfig": { "post": { "operationId": "settings-updateWebServerTraefikConfig", "summary": "Update web server Traefik configuration", "description": "Overwrite the Dokploy-specific Traefik configuration file with the provided content. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "traefikConfig": { "type": "string", "minLength": 1 } }, "required": [ "traefikConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.readMiddlewareTraefikConfig": { "get": { "operationId": "settings-readMiddlewareTraefikConfig", "summary": "Read middleware Traefik configuration", "description": "Read the Traefik middlewares configuration file. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateMiddlewareTraefikConfig": { "post": { "operationId": "settings-updateMiddlewareTraefikConfig", "summary": "Update middleware Traefik configuration", "description": "Overwrite the Traefik middlewares configuration file with the provided content. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "traefikConfig": { "type": "string", "minLength": 1 } }, "required": [ "traefikConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getUpdateData": { "post": { "operationId": "settings-getUpdateData", "summary": "Check for Dokploy updates", "description": "Check whether a newer version of Dokploy is available. Returns default data on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateServer": { "post": { "operationId": "settings-updateServer", "summary": "Update Dokploy to latest version", "description": "Pull the latest Dokploy Docker image and update the service if a new version is available. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getDokployVersion": { "get": { "operationId": "settings-getDokployVersion", "summary": "Get Dokploy version", "description": "Return the currently running Dokploy version from package.json.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getReleaseTag": { "get": { "operationId": "settings-getReleaseTag", "summary": "Get Dokploy release tag", "description": "Return the Docker image tag of the running Dokploy instance.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.readDirectories": { "get": { "operationId": "settings-readDirectories", "summary": "List Traefik configuration directories", "description": "Read the directory listing of the main Traefik configuration path. Requires traefikFiles.read permission.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateTraefikFile": { "post": { "operationId": "settings-updateTraefikFile", "summary": "Update a Traefik configuration file", "description": "Write content to a specific Traefik configuration file at the given path. Requires traefikFiles.write permission.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "path": { "type": "string", "minLength": 1 }, "traefikConfig": { "type": "string", "minLength": 1 }, "serverId": { "type": "string" } }, "required": [ "path", "traefikConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.readTraefikFile": { "get": { "operationId": "settings-readTraefikFile", "summary": "Read a Traefik configuration file", "description": "Read the content of a specific Traefik configuration file at the given path. Requires traefikFiles.read permission. Validates server ownership when a serverId is provided.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "path", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getIp": { "get": { "operationId": "settings-getIp", "summary": "Get server IP address", "description": "Return the configured server IP address from web server settings. Returns an empty string on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateServerIp": { "post": { "operationId": "settings-updateServerIp", "summary": "Update server IP address", "description": "Update the server IP address stored in web server settings. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverIp": { "type": "string" } }, "required": [ "serverIp" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getOpenApiDocument": { "get": { "operationId": "settings-getOpenApiDocument", "summary": "Get OpenAPI specification", "description": "Generate and return the full OpenAPI document for the Dokploy API, including all endpoints, tags, and security schemes.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.readTraefikEnv": { "get": { "operationId": "settings-readTraefikEnv", "summary": "Read Traefik environment variables", "description": "Retrieve the environment variables configured for the Dokploy Traefik service, optionally for a specific server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.writeTraefikEnv": { "post": { "operationId": "settings-writeTraefikEnv", "summary": "Write Traefik environment variables", "description": "Update the environment variables for the Dokploy Traefik service and restart it in the background. Preserves the current port configuration.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "env": { "type": "string" }, "serverId": { "type": "string" } }, "required": [ "env" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.haveTraefikDashboardPortEnabled": { "get": { "operationId": "settings-haveTraefikDashboardPortEnabled", "summary": "Check Traefik dashboard port status", "description": "Check whether port 8080 (Traefik dashboard) is currently enabled in the Traefik service port configuration.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.haveActivateRequests": { "get": { "operationId": "settings-haveActivateRequests", "summary": "Check if request logging is active", "description": "Check whether Traefik access log (request logging) is enabled by inspecting the main Traefik configuration. Returns true on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.toggleRequests": { "post": { "operationId": "settings-toggleRequests", "summary": "Toggle request logging", "description": "Enable or disable Traefik access log (request logging) by updating the main Traefik configuration file. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "enable": { "type": "boolean" } }, "required": [ "enable" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.isCloud": { "get": { "operationId": "settings-isCloud", "summary": "Check if running on cloud", "description": "Return whether this Dokploy instance is running in cloud mode.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.isUserSubscribed": { "get": { "operationId": "settings-isUserSubscribed", "summary": "Check if user has resources", "description": "Check whether the current organization has any servers or projects, indicating active usage.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.health": { "get": { "operationId": "settings-health", "summary": "Health check", "description": "Verify the application is running and the database connection is healthy by executing a simple query.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.checkInfrastructureHealth": { "get": { "operationId": "settings-checkInfrastructureHealth", "summary": "Check infrastructure health", "description": "Check the health status of PostgreSQL, Redis, and Traefik services. Returns healthy for all on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.setupGPU": { "post": { "operationId": "settings-setupGPU", "summary": "Set up GPU support", "description": "Install and configure GPU support (NVIDIA runtime) on the host or a specified server. On cloud, a serverId is required.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.checkGPUStatus": { "get": { "operationId": "settings-checkGPUStatus", "summary": "Check GPU status", "description": "Retrieve detailed GPU status including driver version, CUDA support, memory info, available GPUs, and Docker Swarm GPU resources for the host or a specified server.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateTraefikPorts": { "post": { "operationId": "settings-updateTraefikPorts", "summary": "Update Traefik ports", "description": "Replace the Traefik service port mappings with the provided list. Checks for port conflicts before applying. Runs the Traefik setup in the background.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" }, "additionalPorts": { "type": "array", "items": { "type": "object", "properties": { "targetPort": { "type": "number" }, "publishedPort": { "type": "number" }, "protocol": { "type": "string", "enum": [ "tcp", "udp", "sctp" ] } }, "required": [ "targetPort", "publishedPort", "protocol" ] } } }, "required": [ "additionalPorts" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getTraefikPorts": { "get": { "operationId": "settings-getTraefikPorts", "summary": "Get Traefik ports", "description": "Retrieve the current port mappings configured for the Dokploy Traefik service.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.updateLogCleanup": { "post": { "operationId": "settings-updateLogCleanup", "summary": "Update log cleanup schedule", "description": "Start or stop the automatic log cleanup cron job. Provide a cron expression to start, or null to stop. Disabled on cloud.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "cronExpression": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "cronExpression" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getLogCleanupStatus": { "get": { "operationId": "settings-getLogCleanupStatus", "summary": "Get log cleanup status", "description": "Return the current status and schedule of the automatic log cleanup job.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/settings.getDokployCloudIps": { "get": { "operationId": "settings-getDokployCloudIps", "summary": "Get Dokploy cloud IP addresses", "description": "Return the list of Dokploy cloud IP addresses from the environment configuration. Returns an empty array in self-hosted mode.", "tags": [ "settings" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.create": { "post": { "operationId": "sshKey-create", "summary": "Create SSH key", "description": "Stores a new SSH key for the current organization and logs an audit event.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "privateKey": { "type": "string" }, "publicKey": { "type": "string" }, "organizationId": { "type": "string" } }, "required": [ "name", "privateKey", "publicKey", "organizationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.remove": { "post": { "operationId": "sshKey-remove", "summary": "Delete SSH key", "description": "Removes an SSH key by ID. Verifies organization ownership and logs an audit event before deletion.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "sshKeyId": { "type": "string" } }, "required": [ "sshKeyId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.one": { "get": { "operationId": "sshKey-one", "summary": "Get SSH key", "description": "Returns a single SSH key by ID. Verifies the caller belongs to the same organization.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "sshKeyId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.all": { "get": { "operationId": "sshKey-all", "summary": "List all SSH keys", "description": "Returns all SSH keys for the current organization, ordered by creation date descending.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.allForApps": { "get": { "operationId": "sshKey-allForApps", "summary": "List SSH keys for app selection", "description": "Returns a lightweight list of SSH keys (ID and name only) for the current organization, suitable for dropdown selectors in application forms.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.generate": { "post": { "operationId": "sshKey-generate", "summary": "Generate SSH key pair", "description": "Generates a new SSH key pair of the specified type (RSA, ED25519, etc.) and returns both public and private keys.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "rsa", "ed25519" ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sshKey.update": { "post": { "operationId": "sshKey-update", "summary": "Update SSH key", "description": "Updates an existing SSH key. Verifies organization ownership before applying changes and logs an audit event.", "tags": [ "sshKey" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastUsedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sshKeyId": { "type": "string" } }, "required": [ "sshKeyId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.getCurrentPlan": { "get": { "operationId": "stripe-getCurrentPlan", "summary": "Get current billing plan", "description": "Returns the active Stripe billing plan (hobby, startup, or legacy) for the caller's organization owner. Returns null if not on cloud or no subscription exists.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.getProducts": { "get": { "operationId": "stripe-getProducts", "summary": "List Stripe products and subscriptions", "description": "Returns available Stripe products, the user's active subscriptions, current plan tier, billing interval, and price amount.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.createCheckoutSession": { "post": { "operationId": "stripe-createCheckoutSession", "summary": "Create Stripe checkout session", "description": "Creates a Stripe checkout session for subscribing to a billing plan. Handles customer creation or reuse and returns the session ID for redirect.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "tier": { "type": "string", "enum": [ "legacy", "hobby", "startup" ] }, "productId": { "type": "string" }, "serverQuantity": { "type": "number", "minimum": 1 }, "isAnnual": { "type": "boolean" } }, "required": [ "tier", "productId", "serverQuantity", "isAnnual" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.createCustomerPortalSession": { "post": { "operationId": "stripe-createCustomerPortalSession", "summary": "Create Stripe customer portal session", "description": "Creates a Stripe billing portal session URL so the user can manage their subscription, payment methods, and invoices.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.upgradeSubscription": { "post": { "operationId": "stripe-upgradeSubscription", "summary": "Upgrade subscription", "description": "Upgrades or changes the current Stripe subscription to a different tier or server quantity. Applies prorated charges for the billing period change.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "tier": { "type": "string", "enum": [ "hobby", "startup" ] }, "serverQuantity": { "type": "number", "minimum": 1 }, "isAnnual": { "type": "boolean" } }, "required": [ "tier", "serverQuantity", "isAnnual" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.canCreateMoreServers": { "get": { "operationId": "stripe-canCreateMoreServers", "summary": "Check server creation quota", "description": "Returns whether the organization can create more servers based on their subscription's server quantity limit. Always returns true for self-hosted instances.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.updateInvoiceNotifications": { "post": { "operationId": "stripe-updateInvoiceNotifications", "summary": "Update invoice notification preference", "description": "Enables or disables email notifications for invoice events. Only available on Dokploy Cloud.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "enabled": { "type": "boolean" } }, "required": [ "enabled" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/stripe.getInvoices": { "get": { "operationId": "stripe-getInvoices", "summary": "List invoices", "description": "Returns up to 100 Stripe invoices for the organization owner, including status, amounts, and download links.", "tags": [ "stripe" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/swarm.getNodes": { "get": { "operationId": "swarm-getNodes", "summary": "Get Swarm nodes", "description": "Retrieves all nodes in the Docker Swarm. Optionally targets a remote server by ID.", "tags": [ "swarm" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/swarm.getNodeInfo": { "get": { "operationId": "swarm-getNodeInfo", "summary": "Get Swarm node info", "description": "Retrieves detailed information about a specific Docker Swarm node by its node ID. Optionally targets a remote server.", "tags": [ "swarm" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "nodeId", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/swarm.getNodeApps": { "get": { "operationId": "swarm-getNodeApps", "summary": "Get Swarm node applications", "description": "Retrieves all applications (services) running across Docker Swarm nodes. Optionally targets a remote server.", "tags": [ "swarm" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/swarm.getContainerStats": { "get": { "operationId": "swarm-getContainerStats", "summary": "Get container stats", "description": "Retrieves resource usage statistics for all containers. Optionally targets a remote server and validates organization access.", "tags": [ "swarm" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "serverId", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.all": { "get": { "operationId": "user-all", "summary": "List all organization members", "description": "Retrieve all members of the current active organization, including their associated user data, ordered by creation date.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.one": { "get": { "operationId": "user-one", "summary": "Get a user by ID", "description": "Retrieve a specific user's membership and profile within the active organization. Users can view their own data; admins and owners can view any member. Requires member.update permission for non-self lookups.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "userId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.session": { "get": { "operationId": "user-session", "summary": "Get current session", "description": "Return the current user's ID and active organization ID from the session. Returns null if no valid session exists.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.get": { "get": { "operationId": "user-get", "summary": "Get current user profile", "description": "Retrieve the current authenticated user's membership record including user profile and API keys for the active organization.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getPermissions": { "get": { "operationId": "user-getPermissions", "summary": "Get resolved permissions", "description": "Return the fully resolved permissions for the current user in the active organization, combining role-based and custom permissions.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.haveRootAccess": { "get": { "operationId": "user-haveRootAccess", "summary": "Check root access", "description": "Check whether the current user has root admin access. Only returns true in cloud mode for the designated admin user or impersonating sessions.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getBackups": { "get": { "operationId": "user-getBackups", "summary": "Get user backups", "description": "Retrieve the current admin user's backup configurations including destinations, deployments, and API keys.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getServerMetrics": { "get": { "operationId": "user-getServerMetrics", "summary": "Get server metrics user", "description": "Retrieve the user record associated with server metrics access for the current organization membership.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.update": { "post": { "operationId": "user-update", "summary": "Update current user", "description": "Update the current user's profile. If changing the password, the current password must be provided and verified. Logs an audit event on success.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "firstName": { "type": "string" }, "lastName": { "type": "string" }, "isRegistered": { "type": "boolean" }, "expirationDate": { "type": "string" }, "createdAt2": { "type": "string" }, "createdAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "twoFactorEnabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "email": { "type": "string", "minLength": 1, "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "emailVerified": { "type": "boolean" }, "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "banned": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "banReason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "banExpires": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "updatedAt": { "type": "string" }, "enablePaidFeatures": { "type": "boolean" }, "allowImpersonation": { "type": "boolean" }, "enableEnterpriseFeatures": { "type": "boolean" }, "licenseKey": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "stripeCustomerId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "stripeSubscriptionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serversQuantity": { "type": "number" }, "sendInvoiceNotifications": { "type": "boolean" }, "password": { "type": "string" }, "currentPassword": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getUserByToken": { "get": { "operationId": "user-getUserByToken", "summary": "Get user by token", "description": "Look up a user by their authentication token. This is a public endpoint that does not require an active session.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "token", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getMetricsToken": { "get": { "operationId": "user-getMetricsToken", "summary": "Get metrics token and configuration", "description": "Retrieve the server IP, paid features flag, and monitoring configuration needed for metrics collection.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.remove": { "post": { "operationId": "user-remove", "summary": "Remove a user", "description": "Delete a user from the organization. Only owners and admins can remove users; owners cannot be removed, and admins cannot remove themselves or other admins. Disabled on cloud.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "userId": { "type": "string" } }, "required": [ "userId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.assignPermissions": { "post": { "operationId": "user-assignPermissions", "summary": "Assign member permissions", "description": "Update permissions for a specific member in the organization. Only the organization owner can assign permissions. Git provider and server access restrictions require a valid license.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "accessedProjects": { "type": "array", "items": { "type": "string" } }, "accessedEnvironments": { "type": "array", "items": { "type": "string" } }, "accessedServices": { "type": "array", "items": { "type": "string" } }, "accessedGitProviders": { "type": "array", "items": { "type": "string" } }, "accessedServers": { "type": "array", "items": { "type": "string" } }, "canCreateProjects": { "type": "boolean" }, "canCreateServices": { "type": "boolean" }, "canDeleteProjects": { "type": "boolean" }, "canDeleteServices": { "type": "boolean" }, "canAccessToDocker": { "type": "boolean" }, "canAccessToTraefikFiles": { "type": "boolean" }, "canAccessToAPI": { "type": "boolean" }, "canAccessToSSHKeys": { "type": "boolean" }, "canAccessToGitProviders": { "type": "boolean" }, "canDeleteEnvironments": { "type": "boolean" }, "canCreateEnvironments": { "type": "boolean" } }, "required": [ "id", "accessedProjects", "accessedEnvironments", "accessedServices", "accessedGitProviders", "accessedServers", "canCreateProjects", "canCreateServices", "canDeleteProjects", "canDeleteServices", "canAccessToDocker", "canAccessToTraefikFiles", "canAccessToAPI", "canAccessToSSHKeys", "canAccessToGitProviders", "canDeleteEnvironments", "canCreateEnvironments" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getInvitations": { "get": { "operationId": "user-getInvitations", "summary": "Get pending invitations for current user", "description": "Retrieve all pending organization invitations for the current user's email that have not yet expired.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getContainerMetrics": { "get": { "operationId": "user-getContainerMetrics", "summary": "Get container metrics", "description": "Fetch monitoring metrics for a specific container by querying the metrics endpoint. Requires an application name, metrics URL, and authentication token.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "url", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "token", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "appName", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "dataPoints", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.generateToken": { "post": { "operationId": "user-generateToken", "summary": "Generate authentication token", "description": "Generate a new authentication token for the current user.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.deleteApiKey": { "post": { "operationId": "user-deleteApiKey", "summary": "Delete an API key", "description": "Delete an API key by ID. Only the owner of the API key can delete it. Logs an audit event on success.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "apiKeyId": { "type": "string" } }, "required": [ "apiKeyId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.createApiKey": { "post": { "operationId": "user-createApiKey", "summary": "Create an API key", "description": "Create a new API key for the current user, scoped to a specific organization. Supports optional rate limiting and request limiting configuration.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "prefix": { "type": "string" }, "expiresIn": { "type": "number" }, "metadata": { "type": "object", "properties": { "organizationId": { "type": "string" } }, "required": [ "organizationId" ] }, "rateLimitEnabled": { "type": "boolean" }, "rateLimitTimeWindow": { "type": "number" }, "rateLimitMax": { "type": "number" }, "remaining": { "type": "number" }, "refillAmount": { "type": "number" }, "refillInterval": { "type": "number" } }, "required": [ "name", "metadata" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.checkUserOrganizations": { "get": { "operationId": "user-checkUserOrganizations", "summary": "Check user organization count", "description": "Return the number of organizations a user belongs to. Users can check their own count; admins and owners can check counts for members in the active organization.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "userId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.createUserWithCredentials": { "post": { "operationId": "user-createUserWithCredentials", "summary": "Create user with credentials", "description": "Create a new user with email and password and add them to the active organization with the specified role. Only available in self-hosted mode.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "password": { "type": "string", "minLength": 8 }, "role": { "type": "string", "minLength": 1 } }, "required": [ "email", "password", "role" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.sendInvitation": { "post": { "operationId": "user-sendInvitation", "summary": "Send invitation email", "description": "Send an invitation email to a pending invitee using a configured email or Resend notification provider. Returns the generated invite link. Disabled on cloud.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "invitationId": { "type": "string", "minLength": 1 }, "notificationId": { "type": "string", "minLength": 1 } }, "required": [ "invitationId", "notificationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.getBookmarkedTemplates": { "get": { "operationId": "user-getBookmarkedTemplates", "summary": "Get bookmarked templates", "description": "Retrieve the list of template IDs that the current user has bookmarked.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/user.toggleTemplateBookmark": { "post": { "operationId": "user-toggleTemplateBookmark", "summary": "Toggle template bookmark", "description": "Add or remove a template from the current user's bookmarks. Returns whether the template is now bookmarked.", "tags": [ "user" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "templateId": { "type": "string", "minLength": 1 } }, "required": [ "templateId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.one": { "get": { "operationId": "ai-one", "summary": "Get AI settings by ID", "description": "Returns a single AI provider configuration by its ID.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "aiId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.getModels": { "get": { "operationId": "ai-getModels", "summary": "List available AI models", "description": "Fetches the list of models from the given AI provider URL. Supports OpenAI-compatible, Ollama, Gemini, Perplexity, ZAI, and MiniMax providers.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "apiUrl", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "apiKey", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.create": { "post": { "operationId": "ai-create", "summary": "Create AI provider", "description": "Saves a new AI provider configuration (API URL, key, model) for the current organization.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "apiUrl": { "type": "string", "format": "uri" }, "apiKey": { "type": "string" }, "model": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" } }, "required": [ "name", "apiUrl", "apiKey", "model", "isEnabled" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.update": { "post": { "operationId": "ai-update", "summary": "Update AI provider", "description": "Updates an existing AI provider configuration for the current organization.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "aiId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "apiUrl": { "type": "string", "format": "uri" }, "apiKey": { "type": "string" }, "model": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" }, "createdAt": { "type": "string" } }, "required": [ "aiId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.getAll": { "get": { "operationId": "ai-getAll", "summary": "List all AI providers", "description": "Returns all AI provider configurations for the current organization.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.get": { "get": { "operationId": "ai-get", "summary": "Get AI provider", "description": "Returns a single AI provider configuration by its ID.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "aiId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.delete": { "post": { "operationId": "ai-delete", "summary": "Delete AI provider", "description": "Removes an AI provider configuration by its ID.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "aiId": { "type": "string" } }, "required": [ "aiId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.getEnabledProviders": { "get": { "operationId": "ai-getEnabledProviders", "summary": "List enabled AI providers", "description": "Returns a lightweight list of enabled AI providers (ID, name, model) for the current organization, suitable for dropdown selectors.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.analyzeLogs": { "post": { "operationId": "ai-analyzeLogs", "summary": "Analyze logs with AI", "description": "Sends build or runtime logs to the specified AI provider for analysis. Returns a summary of issues found, root causes, and suggested fixes.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "aiId": { "type": "string", "minLength": 1 }, "logs": { "type": "string", "minLength": 1 }, "context": { "type": "string", "enum": [ "build", "runtime" ] } }, "required": [ "aiId", "logs", "context" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.testConnection": { "post": { "operationId": "ai-testConnection", "summary": "Test AI provider connection", "description": "Sends a minimal prompt to the specified AI provider and model to verify the API URL, key, and model are valid and reachable.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "apiUrl": { "type": "string", "minLength": 1 }, "apiKey": { "type": "string" }, "model": { "type": "string", "minLength": 1 } }, "required": [ "apiUrl", "apiKey", "model" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.suggest": { "post": { "operationId": "ai-suggest", "summary": "Suggest deployment variants", "description": "Uses AI to generate deployment configuration suggestions (docker-compose variants) based on the user's input prompt.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "aiId": { "type": "string" }, "input": { "type": "string" }, "serverId": { "type": "string" } }, "required": [ "aiId", "input" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/ai.deploy": { "post": { "operationId": "ai-deploy", "summary": "Deploy AI suggestion", "description": "Deploys an AI-generated suggestion by creating a compose service with its docker-compose file, environment variables, domains, and config file mounts.", "tags": [ "ai" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environmentId": { "type": "string", "minLength": 1 }, "id": { "type": "string", "minLength": 1 }, "dockerCompose": { "type": "string", "minLength": 1 }, "envVariables": { "type": "string" }, "serverId": { "type": "string" }, "name": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "domains": { "type": "array", "items": { "type": "object", "properties": { "host": { "type": "string", "minLength": 1 }, "port": { "type": "number", "minimum": 1 }, "serviceName": { "type": "string", "minLength": 1 } }, "required": [ "host", "port", "serviceName" ] } }, "configFiles": { "type": "array", "items": { "type": "object", "properties": { "filePath": { "type": "string", "minLength": 1 }, "content": { "type": "string", "minLength": 1 } }, "required": [ "filePath", "content" ] } } }, "required": [ "environmentId", "id", "dockerCompose", "envVariables", "name", "description" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.create": { "post": { "operationId": "organization-create", "summary": "Create an organization", "description": "Create a new organization and add the current user as the owner. Only owners and admins can create organizations in self-hosted mode.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "logo": { "type": "string" } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.all": { "get": { "operationId": "organization-all", "summary": "List all organizations", "description": "Retrieve all organizations the current user is a member of, including their membership details.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.one": { "get": { "operationId": "organization-one", "summary": "Get an organization by ID", "description": "Retrieve a single organization by its ID. The current user must be a member of the organization.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "organizationId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.update": { "post": { "operationId": "organization-update", "summary": "Update an organization", "description": "Update the name and logo of an organization. Only the organization owner can perform this action.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "organizationId": { "type": "string" }, "name": { "type": "string" }, "logo": { "type": "string" } }, "required": [ "organizationId", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.delete": { "post": { "operationId": "organization-delete", "summary": "Delete an organization", "description": "Delete an organization by ID. Only the owner can delete it, and they must retain at least one organization.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "organizationId": { "type": "string" } }, "required": [ "organizationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.inviteMember": { "post": { "operationId": "organization-inviteMember", "summary": "Invite a member to organization", "description": "Create a pending invitation for a user by email to join the active organization with the specified role. Checks for existing membership and pending invitations. Supports custom roles.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "role": { "type": "string", "minLength": 1 } }, "required": [ "email", "role" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.allInvitations": { "get": { "operationId": "organization-allInvitations", "summary": "List all organization invitations", "description": "Retrieve all invitations for the active organization, ordered by status and expiration date.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.removeInvitation": { "post": { "operationId": "organization-removeInvitation", "summary": "Remove an invitation", "description": "Delete a pending invitation by ID. Only invitations belonging to the active organization can be removed.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "invitationId": { "type": "string" } }, "required": [ "invitationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.updateMemberRole": { "post": { "operationId": "organization-updateMemberRole", "summary": "Update member role", "description": "Change the role of a member in the active organization. Users cannot change their own role, and the owner role is nontransferable. Only owners can change admin roles. Supports custom roles.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "memberId": { "type": "string" }, "role": { "type": "string", "minLength": 1 } }, "required": [ "memberId", "role" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.setDefault": { "post": { "operationId": "organization-setDefault", "summary": "Set default organization", "description": "Set an organization as the default for the current user. Unsets any previous default and marks the specified organization as the new default.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "organizationId": { "type": "string", "minLength": 1 } }, "required": [ "organizationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/organization.active": { "get": { "operationId": "organization-active", "summary": "Get active organization", "description": "Retrieve the organization that is currently active in the user's session. Returns null if no organization is active.", "tags": [ "organization" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/licenseKey.activate": { "post": { "operationId": "licenseKey-activate", "tags": [ "licenseKey" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "licenseKey": { "type": "string", "minLength": 1 } }, "required": [ "licenseKey" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/licenseKey.validate": { "post": { "operationId": "licenseKey-validate", "tags": [ "licenseKey" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/licenseKey.deactivate": { "post": { "operationId": "licenseKey-deactivate", "tags": [ "licenseKey" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/licenseKey.getEnterpriseSettings": { "get": { "operationId": "licenseKey-getEnterpriseSettings", "tags": [ "licenseKey" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/licenseKey.haveValidLicenseKey": { "get": { "operationId": "licenseKey-haveValidLicenseKey", "tags": [ "licenseKey" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/licenseKey.updateEnterpriseSettings": { "post": { "operationId": "licenseKey-updateEnterpriseSettings", "tags": [ "licenseKey" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "enableEnterpriseFeatures": { "type": "boolean" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.showSignInWithSSO": { "get": { "operationId": "sso-showSignInWithSSO", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.listProviders": { "get": { "operationId": "sso-listProviders", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.getTrustedOrigins": { "get": { "operationId": "sso-getTrustedOrigins", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.one": { "get": { "operationId": "sso-one", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "providerId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.update": { "post": { "operationId": "sso-update", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "providerId": { "type": "string" }, "issuer": { "type": "string" }, "domains": { "type": "array", "items": { "type": "string" } }, "oidcConfig": { "type": "object", "properties": { "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "authorizationEndpoint": { "type": "string" }, "tokenEndpoint": { "type": "string" }, "userInfoEndpoint": { "type": "string" }, "tokenEndpointAuthentication": { "type": "string", "enum": [ "client_secret_post", "client_secret_basic" ] }, "jwksEndpoint": { "type": "string" }, "discoveryEndpoint": { "type": "string" }, "skipDiscovery": { "type": "boolean" }, "scopes": { "type": "array", "items": { "type": "string" } }, "pkce": { "default": true, "type": "boolean" }, "mapping": { "type": "object", "properties": { "id": { "type": "string" }, "email": { "type": "string" }, "emailVerified": { "type": "string" }, "name": { "type": "string" }, "image": { "type": "string" }, "extraFields": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "id", "email", "name" ] } }, "required": [ "clientId", "clientSecret" ] }, "samlConfig": { "type": "object", "properties": { "entryPoint": { "type": "string" }, "cert": { "type": "string" }, "callbackUrl": { "type": "string" }, "audience": { "type": "string" }, "idpMetadata": { "type": "object", "properties": { "metadata": { "type": "string" }, "entityID": { "type": "string" }, "cert": { "type": "string" }, "privateKey": { "type": "string" }, "privateKeyPass": { "type": "string" }, "isAssertionEncrypted": { "type": "boolean" }, "encPrivateKey": { "type": "string" }, "encPrivateKeyPass": { "type": "string" }, "singleSignOnService": { "type": "array", "items": { "type": "object", "properties": { "Binding": { "type": "string" }, "Location": { "type": "string" } }, "required": [ "Binding", "Location" ] } } } }, "spMetadata": { "type": "object", "properties": { "metadata": { "type": "string" }, "entityID": { "type": "string" }, "binding": { "type": "string" }, "privateKey": { "type": "string" }, "privateKeyPass": { "type": "string" }, "isAssertionEncrypted": { "type": "boolean" }, "encPrivateKey": { "type": "string" }, "encPrivateKeyPass": { "type": "string" } } }, "wantAssertionsSigned": { "type": "boolean" }, "authnRequestsSigned": { "type": "boolean" }, "signatureAlgorithm": { "type": "string" }, "digestAlgorithm": { "type": "string" }, "identifierFormat": { "type": "string" }, "privateKey": { "type": "string" }, "decryptionPvk": { "type": "string" }, "additionalParams": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "mapping": { "type": "object", "properties": { "id": { "type": "string" }, "email": { "type": "string" }, "emailVerified": { "type": "string" }, "name": { "type": "string" }, "firstName": { "type": "string" }, "lastName": { "type": "string" }, "extraFields": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "id", "email", "name" ] } }, "required": [ "entryPoint", "cert", "callbackUrl", "spMetadata" ] }, "organizationId": { "type": "string" }, "overrideUserInfo": { "default": false, "type": "boolean" } }, "required": [ "providerId", "issuer", "domains" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.deleteProvider": { "post": { "operationId": "sso-deleteProvider", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "providerId": { "type": "string", "minLength": 1 } }, "required": [ "providerId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.register": { "post": { "operationId": "sso-register", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "providerId": { "type": "string" }, "issuer": { "type": "string" }, "domains": { "type": "array", "items": { "type": "string" } }, "oidcConfig": { "type": "object", "properties": { "clientId": { "type": "string" }, "clientSecret": { "type": "string" }, "authorizationEndpoint": { "type": "string" }, "tokenEndpoint": { "type": "string" }, "userInfoEndpoint": { "type": "string" }, "tokenEndpointAuthentication": { "type": "string", "enum": [ "client_secret_post", "client_secret_basic" ] }, "jwksEndpoint": { "type": "string" }, "discoveryEndpoint": { "type": "string" }, "skipDiscovery": { "type": "boolean" }, "scopes": { "type": "array", "items": { "type": "string" } }, "pkce": { "default": true, "type": "boolean" }, "mapping": { "type": "object", "properties": { "id": { "type": "string" }, "email": { "type": "string" }, "emailVerified": { "type": "string" }, "name": { "type": "string" }, "image": { "type": "string" }, "extraFields": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "id", "email", "name" ] } }, "required": [ "clientId", "clientSecret" ] }, "samlConfig": { "type": "object", "properties": { "entryPoint": { "type": "string" }, "cert": { "type": "string" }, "callbackUrl": { "type": "string" }, "audience": { "type": "string" }, "idpMetadata": { "type": "object", "properties": { "metadata": { "type": "string" }, "entityID": { "type": "string" }, "cert": { "type": "string" }, "privateKey": { "type": "string" }, "privateKeyPass": { "type": "string" }, "isAssertionEncrypted": { "type": "boolean" }, "encPrivateKey": { "type": "string" }, "encPrivateKeyPass": { "type": "string" }, "singleSignOnService": { "type": "array", "items": { "type": "object", "properties": { "Binding": { "type": "string" }, "Location": { "type": "string" } }, "required": [ "Binding", "Location" ] } } } }, "spMetadata": { "type": "object", "properties": { "metadata": { "type": "string" }, "entityID": { "type": "string" }, "binding": { "type": "string" }, "privateKey": { "type": "string" }, "privateKeyPass": { "type": "string" }, "isAssertionEncrypted": { "type": "boolean" }, "encPrivateKey": { "type": "string" }, "encPrivateKeyPass": { "type": "string" } } }, "wantAssertionsSigned": { "type": "boolean" }, "authnRequestsSigned": { "type": "boolean" }, "signatureAlgorithm": { "type": "string" }, "digestAlgorithm": { "type": "string" }, "identifierFormat": { "type": "string" }, "privateKey": { "type": "string" }, "decryptionPvk": { "type": "string" }, "additionalParams": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "mapping": { "type": "object", "properties": { "id": { "type": "string" }, "email": { "type": "string" }, "emailVerified": { "type": "string" }, "name": { "type": "string" }, "firstName": { "type": "string" }, "lastName": { "type": "string" }, "extraFields": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "id", "email", "name" ] } }, "required": [ "entryPoint", "cert", "callbackUrl", "spMetadata" ] }, "organizationId": { "type": "string" }, "overrideUserInfo": { "default": false, "type": "boolean" } }, "required": [ "providerId", "issuer", "domains" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.addTrustedOrigin": { "post": { "operationId": "sso-addTrustedOrigin", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "origin": { "type": "string", "minLength": 1 } }, "required": [ "origin" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.removeTrustedOrigin": { "post": { "operationId": "sso-removeTrustedOrigin", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "origin": { "type": "string", "minLength": 1 } }, "required": [ "origin" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/sso.updateTrustedOrigin": { "post": { "operationId": "sso-updateTrustedOrigin", "tags": [ "sso" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "oldOrigin": { "type": "string", "minLength": 1 }, "newOrigin": { "type": "string", "minLength": 1 } }, "required": [ "oldOrigin", "newOrigin" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/whitelabeling.get": { "get": { "operationId": "whitelabeling-get", "tags": [ "whitelabeling" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/whitelabeling.update": { "post": { "operationId": "whitelabeling-update", "tags": [ "whitelabeling" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "whitelabelingConfig": { "type": "object", "properties": { "appName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "appDescription": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "logoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "faviconUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "customCss": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "loginLogoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supportUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "docsUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorPageTitle": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorPageDescription": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metaTitle": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "footerText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "appName", "appDescription", "logoUrl", "faviconUrl", "customCss", "loginLogoUrl", "supportUrl", "docsUrl", "errorPageTitle", "errorPageDescription", "metaTitle", "footerText" ] } }, "required": [ "whitelabelingConfig" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/whitelabeling.reset": { "post": { "operationId": "whitelabeling-reset", "tags": [ "whitelabeling" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/whitelabeling.getPublic": { "get": { "operationId": "whitelabeling-getPublic", "tags": [ "whitelabeling" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/customRole.all": { "get": { "operationId": "customRole-all", "tags": [ "customRole" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/customRole.create": { "post": { "operationId": "customRole-create", "tags": [ "customRole" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "roleName": { "type": "string", "minLength": 1, "maxLength": 50 }, "permissions": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "array", "items": { "type": "string" } } } }, "required": [ "roleName", "permissions" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/customRole.update": { "post": { "operationId": "customRole-update", "tags": [ "customRole" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "roleName": { "type": "string", "minLength": 1 }, "newRoleName": { "type": "string", "minLength": 1, "maxLength": 50 }, "permissions": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "array", "items": { "type": "string" } } } }, "required": [ "roleName", "permissions" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/customRole.remove": { "post": { "operationId": "customRole-remove", "tags": [ "customRole" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "roleName": { "type": "string", "minLength": 1 } }, "required": [ "roleName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/customRole.membersByRole": { "get": { "operationId": "customRole-membersByRole", "tags": [ "customRole" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "roleName", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/customRole.getStatements": { "get": { "operationId": "customRole-getStatements", "tags": [ "customRole" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/auditLog.all": { "get": { "operationId": "auditLog-all", "tags": [ "auditLog" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "userId", "schema": { "type": "string" } }, { "in": "query", "name": "userEmail", "schema": { "type": "string" } }, { "in": "query", "name": "resourceName", "schema": { "type": "string" } }, { "in": "query", "name": "action", "schema": { "type": "string", "enum": [ "create", "update", "delete", "deploy", "cancel", "redeploy", "login", "logout" ] } }, { "in": "query", "name": "resourceType", "schema": { "type": "string", "enum": [ "project", "service", "environment", "deployment", "user", "customRole", "domain", "certificate", "registry", "server", "sshKey", "gitProvider", "notification", "settings", "session" ] } }, { "in": "query", "name": "from", "schema": { "type": "string" } }, { "in": "query", "name": "to", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 500 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/schedule.create": { "post": { "operationId": "schedule-create", "summary": "Create a scheduled job", "description": "Creates a new scheduled job for an application or compose service. If enabled, the job is automatically scheduled using the provided cron expression and timezone.", "tags": [ "schedule" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "scheduleId": { "type": "string" }, "name": { "type": "string" }, "cronExpression": { "type": "string" }, "appName": { "type": "string" }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "shellType": { "type": "string", "enum": [ "bash", "sh" ] }, "scheduleType": { "type": "string", "enum": [ "application", "compose", "server", "dokploy-server" ] }, "command": { "type": "string" }, "script": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "userId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enabled": { "type": "boolean" }, "timezone": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "name", "cronExpression", "command" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/schedule.update": { "post": { "operationId": "schedule-update", "summary": "Update a scheduled job", "description": "Updates an existing scheduled job configuration. Reschedules or removes the job depending on the enabled state.", "tags": [ "schedule" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "scheduleId": { "type": "string", "minLength": 1 }, "name": { "type": "string" }, "cronExpression": { "type": "string" }, "appName": { "type": "string" }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "shellType": { "type": "string", "enum": [ "bash", "sh" ] }, "scheduleType": { "type": "string", "enum": [ "application", "compose", "server", "dokploy-server" ] }, "command": { "type": "string" }, "script": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "serverId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "userId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enabled": { "type": "boolean" }, "timezone": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "scheduleId", "name", "cronExpression", "command" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/schedule.delete": { "post": { "operationId": "schedule-delete", "summary": "Delete a scheduled job", "description": "Permanently removes a scheduled job and unschedules any associated cron job.", "tags": [ "schedule" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "scheduleId": { "type": "string" } }, "required": [ "scheduleId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/schedule.list": { "get": { "operationId": "schedule-list", "summary": "List scheduled jobs", "description": "Returns all scheduled jobs for a given service (application, compose, server, or dokploy-server), including their deployment history.", "tags": [ "schedule" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "scheduleType", "schema": { "type": "string", "enum": [ "application", "compose", "server", "dokploy-server" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/schedule.one": { "get": { "operationId": "schedule-one", "summary": "Get a scheduled job", "description": "Returns the details of a specific scheduled job by its ID.", "tags": [ "schedule" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "scheduleId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/schedule.runManually": { "post": { "operationId": "schedule-runManually", "summary": "Run a scheduled job manually", "description": "Immediately executes a scheduled job outside of its normal cron schedule.", "tags": [ "schedule" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "scheduleId": { "type": "string", "minLength": 1 } }, "required": [ "scheduleId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/rollback.delete": { "post": { "operationId": "rollback-delete", "summary": "Delete a rollback", "description": "Permanently removes a rollback record by its ID.", "tags": [ "rollback" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "rollbackId": { "type": "string", "minLength": 1 } }, "required": [ "rollbackId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/rollback.rollback": { "post": { "operationId": "rollback-rollback", "summary": "Perform a rollback", "description": "Rolls back an application to a previous deployment by restoring its Docker image and redeploying.", "tags": [ "rollback" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "rollbackId": { "type": "string", "minLength": 1 } }, "required": [ "rollbackId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/volumeBackups.list": { "get": { "operationId": "volumeBackups-list", "summary": "List volume backups", "description": "Returns all volume backup configurations for a given service, including related service details.", "tags": [ "volumeBackups" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "volumeBackupType", "schema": { "type": "string", "enum": [ "application", "postgres", "mysql", "mariadb", "mongo", "redis", "compose", "libsql" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/volumeBackups.create": { "post": { "operationId": "volumeBackups-create", "summary": "Create a volume backup", "description": "Creates a new volume backup configuration for a service. If enabled, automatically schedules the backup using the provided cron expression.", "tags": [ "volumeBackups" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "volumeName": { "type": "string" }, "prefix": { "type": "string" }, "serviceType": { "type": "string", "enum": [ "application", "postgres", "mysql", "mariadb", "mongo", "redis", "compose", "libsql" ] }, "appName": { "type": "string" }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "turnOff": { "type": "boolean" }, "cronExpression": { "type": "string" }, "keepLatestCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "postgresId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mariadbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mongoId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mysqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "redisId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "libsqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "destinationId": { "type": "string" } }, "required": [ "name", "volumeName", "prefix", "cronExpression", "destinationId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/volumeBackups.one": { "get": { "operationId": "volumeBackups-one", "summary": "Get a volume backup", "description": "Returns the details of a specific volume backup configuration by its ID.", "tags": [ "volumeBackups" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "volumeBackupId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/volumeBackups.delete": { "post": { "operationId": "volumeBackups-delete", "summary": "Delete a volume backup", "description": "Permanently removes a volume backup configuration by its ID.", "tags": [ "volumeBackups" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "volumeBackupId": { "type": "string", "minLength": 1 } }, "required": [ "volumeBackupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/volumeBackups.update": { "post": { "operationId": "volumeBackups-update", "summary": "Update a volume backup", "description": "Updates an existing volume backup configuration. Reschedules or removes the backup job depending on the enabled state.", "tags": [ "volumeBackups" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "volumeName": { "type": "string" }, "prefix": { "type": "string" }, "serviceType": { "type": "string", "enum": [ "application", "postgres", "mysql", "mariadb", "mongo", "redis", "compose", "libsql" ] }, "appName": { "type": "string" }, "serviceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "turnOff": { "type": "boolean" }, "cronExpression": { "type": "string" }, "keepLatestCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ] }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "postgresId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mariadbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mongoId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mysqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "redisId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "libsqlId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "destinationId": { "type": "string" }, "volumeBackupId": { "type": "string", "minLength": 1 } }, "required": [ "name", "volumeName", "prefix", "cronExpression", "destinationId", "volumeBackupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/volumeBackups.runManually": { "post": { "operationId": "volumeBackups-runManually", "summary": "Run a volume backup manually", "description": "Immediately executes a volume backup outside of its normal cron schedule.", "tags": [ "volumeBackups" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "volumeBackupId": { "type": "string", "minLength": 1 } }, "required": [ "volumeBackupId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.create": { "post": { "operationId": "environment-create", "summary": "Create environment", "description": "Creates a new environment within a project. The name 'production' is reserved and cannot be used. Checks creation permissions and logs an audit event.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "projectId": { "type": "string", "minLength": 1 } }, "required": [ "name", "projectId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.one": { "get": { "operationId": "environment-one", "summary": "Get environment", "description": "Returns a single environment by ID with all its services. Non-admin users only see services they have been granted access to.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "environmentId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.byProjectId": { "get": { "operationId": "environment-byProjectId", "summary": "List environments by project", "description": "Returns all environments for a given project. Non-admin users only see environments and services they have been granted access to.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "projectId", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.remove": { "post": { "operationId": "environment-remove", "summary": "Delete environment", "description": "Deletes an environment by ID. The default environment cannot be deleted. Checks deletion permissions and environment access before removing.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environmentId": { "type": "string", "minLength": 1 } }, "required": [ "environmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.update": { "post": { "operationId": "environment-update", "summary": "Update environment", "description": "Updates an environment's name, description, or env variables. The default environment cannot be renamed. Checks environment access and env-var write permissions.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environmentId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "projectId": { "type": "string" }, "env": { "type": "string" } }, "required": [ "environmentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.duplicate": { "post": { "operationId": "environment-duplicate", "summary": "Duplicate environment", "description": "Creates a copy of an existing environment including its services. Checks environment access and organization ownership before duplicating.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environmentId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "description": { "type": "string" } }, "required": [ "environmentId", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/environment.search": { "get": { "operationId": "environment-search", "summary": "Search environments", "description": "Searches environments by name, description, or project with pagination. Non-admin users only see environments they have been granted access to.", "tags": [ "environment" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "q", "schema": { "type": "string" } }, { "in": "query", "name": "name", "schema": { "type": "string" } }, { "in": "query", "name": "description", "schema": { "type": "string" } }, { "in": "query", "name": "projectId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.create": { "post": { "operationId": "tag-create", "summary": "Create tag", "description": "Creates a new tag with a name and color for the current organization. Tag names must be unique within the organization.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "color": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.all": { "get": { "operationId": "tag-all", "summary": "List all tags", "description": "Returns all tags for the current organization, ordered alphabetically by name.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.one": { "get": { "operationId": "tag-one", "summary": "Get tag", "description": "Returns a single tag by ID. Only returns tags belonging to the caller's organization.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "tagId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.update": { "post": { "operationId": "tag-update", "summary": "Update tag", "description": "Updates an existing tag's name and/or color. Verifies the tag belongs to the caller's organization. Tag names must remain unique.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "tagId": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1 }, "color": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "organizationId": { "type": "string" } }, "required": [ "tagId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.remove": { "post": { "operationId": "tag-remove", "summary": "Delete tag", "description": "Deletes a tag by ID. Cascade-deletes all project-tag associations. Verifies the tag belongs to the caller's organization.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "tagId": { "type": "string", "minLength": 1 } }, "required": [ "tagId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.assignToProject": { "post": { "operationId": "tag-assignToProject", "summary": "Assign tag to project", "description": "Associates a tag with a project. Verifies that both the tag and project belong to the caller's organization and that the caller has project access.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectId": { "type": "string", "minLength": 1 }, "tagId": { "type": "string", "minLength": 1 } }, "required": [ "projectId", "tagId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.removeFromProject": { "post": { "operationId": "tag-removeFromProject", "summary": "Remove tag from project", "description": "Removes a tag-project association. Verifies that both the tag and project belong to the caller's organization and that the caller has project access.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectId": { "type": "string", "minLength": 1 }, "tagId": { "type": "string", "minLength": 1 } }, "required": [ "projectId", "tagId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/tag.bulkAssign": { "post": { "operationId": "tag-bulkAssign", "summary": "Bulk assign tags to project", "description": "Replaces all tag associations for a project with the provided list of tag IDs. Removes existing associations first, then inserts the new set.", "tags": [ "tag" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectId": { "type": "string", "minLength": 1 }, "tagIds": { "type": "array", "items": { "type": "string", "minLength": 1 } } }, "required": [ "projectId", "tagIds" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.create": { "post": { "operationId": "patch-create", "summary": "Create patch", "description": "Creates a new file patch for an application or compose service. Checks service-level permissions and logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "filePath": { "type": "string", "minLength": 1 }, "content": { "type": "string" }, "type": { "type": "string", "enum": [ "create", "update", "delete" ] }, "enabled": { "type": "boolean" }, "applicationId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "filePath", "content" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.one": { "get": { "operationId": "patch-one", "summary": "Get patch", "description": "Returns a single patch by ID. Resolves the associated service to verify read permissions.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "patchId", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.byEntityId": { "get": { "operationId": "patch-byEntityId", "summary": "List patches by entity", "description": "Returns all patches associated with a given application or compose service.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "application", "compose" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.update": { "post": { "operationId": "patch-update", "summary": "Update patch", "description": "Updates the content or configuration of an existing patch. Resolves the associated service to verify permissions and logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "patchId": { "type": "string", "minLength": 1 }, "type": { "type": "string", "enum": [ "create", "update", "delete" ] }, "filePath": { "type": "string", "minLength": 1 }, "enabled": { "type": "boolean" }, "content": { "type": "string" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "patchId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.delete": { "post": { "operationId": "patch-delete", "summary": "Delete patch", "description": "Deletes a patch by ID. Resolves the associated service to verify delete permissions and logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "patchId": { "type": "string", "minLength": 1 } }, "required": [ "patchId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.toggleEnabled": { "post": { "operationId": "patch-toggleEnabled", "summary": "Toggle patch enabled state", "description": "Enables or disables a patch without deleting it. Resolves the associated service to verify permissions and logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "patchId": { "type": "string", "minLength": 1 }, "enabled": { "type": "boolean" } }, "required": [ "patchId", "enabled" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.ensureRepo": { "post": { "operationId": "patch-ensureRepo", "summary": "Ensure patch repository exists", "description": "Ensures a patch repository is initialized for the given application or compose service. Creates the repo if it does not exist and logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string", "enum": [ "application", "compose" ] } }, "required": [ "id", "type" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.readRepoDirectories": { "get": { "operationId": "patch-readRepoDirectories", "summary": "List patch repository directories", "description": "Reads the directory listing at a given path inside the patch repository for an application or compose service.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "application", "compose" ] }, "required": true }, { "in": "query", "name": "repoPath", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.readRepoFile": { "get": { "operationId": "patch-readRepoFile", "summary": "Read patch repository file", "description": "Reads a file from the patch repository. For delete-type patches it returns the current repo content; otherwise returns the patch content if available, falling back to the repo file.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [ { "in": "query", "name": "id", "schema": { "type": "string", "minLength": 1 }, "required": true }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "application", "compose" ] }, "required": true }, { "in": "query", "name": "filePath", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.saveFileAsPatch": { "post": { "operationId": "patch-saveFileAsPatch", "summary": "Save file as patch", "description": "Creates or updates a patch record from file content. If a patch already exists for the file path, it updates the existing patch; otherwise creates a new one.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "type": { "type": "string", "enum": [ "application", "compose" ] }, "filePath": { "type": "string" }, "content": { "type": "string" }, "patchType": { "default": "update", "type": "string", "enum": [ "create", "update" ] } }, "required": [ "id", "type", "filePath", "content" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.markFileForDeletion": { "post": { "operationId": "patch-markFileForDeletion", "summary": "Mark file for deletion", "description": "Creates a delete-type patch that will remove the specified file from the service on next deployment. Logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "type": { "type": "string", "enum": [ "application", "compose" ] }, "filePath": { "type": "string" } }, "required": [ "id", "type", "filePath" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } }, "/patch.cleanPatchRepos": { "post": { "operationId": "patch-cleanPatchRepos", "summary": "Clean patch repositories", "description": "Removes all patch repository working directories on the local or a specified remote server. Admin-only operation that logs an audit event.", "tags": [ "patch" ], "security": [ { "Authorization": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "serverId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": {}, "additionalProperties": false } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } } } } } } }, "components": { "schemas": { "error.BAD_REQUEST": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Invalid input data" }, "code": { "type": "string", "description": "The error code", "example": "BAD_REQUEST" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Invalid input data error (400)", "description": "The error information", "example": { "code": "BAD_REQUEST", "message": "Invalid input data", "issues": [] } }, "error.UNAUTHORIZED": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Authorization not provided" }, "code": { "type": "string", "description": "The error code", "example": "UNAUTHORIZED" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Authorization not provided error (401)", "description": "The error information", "example": { "code": "UNAUTHORIZED", "message": "Authorization not provided", "issues": [] } }, "error.FORBIDDEN": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Insufficient access" }, "code": { "type": "string", "description": "The error code", "example": "FORBIDDEN" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Insufficient access error (403)", "description": "The error information", "example": { "code": "FORBIDDEN", "message": "Insufficient access", "issues": [] } }, "error.INTERNAL_SERVER_ERROR": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Internal server error" }, "code": { "type": "string", "description": "The error code", "example": "INTERNAL_SERVER_ERROR" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Internal server error error (500)", "description": "The error information", "example": { "code": "INTERNAL_SERVER_ERROR", "message": "Internal server error", "issues": [] } }, "error.NOT_FOUND": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Not found" }, "code": { "type": "string", "description": "The error code", "example": "NOT_FOUND" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Not found error (404)", "description": "The error information", "example": { "code": "NOT_FOUND", "message": "Not found", "issues": [] } } }, "securitySchemes": { "apiKey": { "type": "apiKey", "in": "header", "name": "x-api-key", "description": "API key authentication. Generate an API key from your Dokploy dashboard under Settings > API Keys." } } }, "security": [ { "apiKey": [] } ] }