openapi: 3.1.0
info:
  title: Coolify
  version: '0.1'
servers:
  -
    url: 'https://app.coolify.io/api/v1'
    description: 'Coolify Cloud API. Change the host to your own instance if you are self-hosting.'
paths:
  /applications:
    get:
      tags:
        - Applications
      summary: List
      description: 'List all applications.'
      operationId: list-applications
      responses:
        '200':
          description: 'Get all applications.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Application'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /applications/public:
    post:
      tags:
        - Applications
      summary: 'Create (Public)'
      description: 'Create new application based on a public git repository.'
      operationId: create-public-application
      requestBody:
        description: 'Application object that needs to be created.'
        required: true
        content:
          application/json:
            schema:
              required:
                - project_uuid
                - server_uuid
                - environment_name
                - environment_uuid
                - git_repository
                - git_branch
                - build_pack
                - ports_exposes
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                git_repository:
                  type: string
                  description: 'The git repository URL.'
                git_branch:
                  type: string
                  description: 'The git branch.'
                build_pack:
                  type: string
                  enum: [nixpacks, static, dockerfile, dockercompose]
                  description: 'The build pack type.'
                ports_exposes:
                  type: string
                  description: 'The ports to expose.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                domains:
                  type: string
                  description: 'The application domains.'
                git_commit_sha:
                  type: string
                  description: 'The git commit SHA.'
                docker_registry_image_name:
                  type: string
                  description: 'The docker registry image name.'
                docker_registry_image_tag:
                  type: string
                  description: 'The docker registry image tag.'
                is_static:
                  type: boolean
                  description: 'The flag to indicate if the application is static.'
                static_image:
                  type: string
                  enum: ['nginx:alpine']
                  description: 'The static image.'
                install_command:
                  type: string
                  description: 'The install command.'
                build_command:
                  type: string
                  description: 'The build command.'
                start_command:
                  type: string
                  description: 'The start command.'
                ports_mappings:
                  type: string
                  description: 'The ports mappings.'
                base_directory:
                  type: string
                  description: 'The base directory for all commands.'
                publish_directory:
                  type: string
                  description: 'The publish directory.'
                health_check_enabled:
                  type: boolean
                  description: 'Health check enabled.'
                health_check_path:
                  type: string
                  description: 'Health check path.'
                health_check_port:
                  type: string
                  nullable: true
                  description: 'Health check port.'
                health_check_host:
                  type: string
                  nullable: true
                  description: 'Health check host.'
                health_check_method:
                  type: string
                  description: 'Health check method.'
                health_check_return_code:
                  type: integer
                  description: 'Health check return code.'
                health_check_scheme:
                  type: string
                  description: 'Health check scheme.'
                health_check_response_text:
                  type: string
                  nullable: true
                  description: 'Health check response text.'
                health_check_interval:
                  type: integer
                  description: 'Health check interval in seconds.'
                health_check_timeout:
                  type: integer
                  description: 'Health check timeout in seconds.'
                health_check_retries:
                  type: integer
                  description: 'Health check retries count.'
                health_check_start_period:
                  type: integer
                  description: 'Health check start period in seconds.'
                limits_memory:
                  type: string
                  description: 'Memory limit.'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit.'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness.'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation.'
                limits_cpus:
                  type: string
                  description: 'CPU limit.'
                limits_cpuset:
                  type: string
                  nullable: true
                  description: 'CPU set.'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares.'
                custom_labels:
                  type: string
                  description: 'Custom labels.'
                custom_docker_run_options:
                  type: string
                  description: 'Custom docker run options.'
                post_deployment_command:
                  type: string
                  description: 'Post deployment command.'
                post_deployment_command_container:
                  type: string
                  description: 'Post deployment command container.'
                pre_deployment_command:
                  type: string
                  description: 'Pre deployment command.'
                pre_deployment_command_container:
                  type: string
                  description: 'Pre deployment command container.'
                manual_webhook_secret_github:
                  type: string
                  description: 'Manual webhook secret for Github.'
                manual_webhook_secret_gitlab:
                  type: string
                  description: 'Manual webhook secret for Gitlab.'
                manual_webhook_secret_bitbucket:
                  type: string
                  description: 'Manual webhook secret for Bitbucket.'
                manual_webhook_secret_gitea:
                  type: string
                  description: 'Manual webhook secret for Gitea.'
                redirect:
                  type: string
                  nullable: true
                  description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
                  enum: [www, non-www, both]
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                dockerfile:
                  type: string
                  description: 'The Dockerfile content.'
                docker_compose_location:
                  type: string
                  description: 'The Docker Compose location.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
                docker_compose_custom_start_command:
                  type: string
                  description: 'The Docker Compose custom start command.'
                docker_compose_custom_build_command:
                  type: string
                  description: 'The Docker Compose custom build command.'
                docker_compose_domains:
                  type: array
                  description: 'The Docker Compose domains.'
                watch_paths:
                  type: string
                  description: 'The watch paths.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                is_http_basic_auth_enabled:
                  type: boolean
                  description: 'HTTP Basic Authentication enabled.'
                http_basic_auth_username:
                  type: string
                  nullable: true
                  description: 'Username for HTTP Basic Authentication'
                http_basic_auth_password:
                  type: string
                  nullable: true
                  description: 'Password for HTTP Basic Authentication'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '201':
          description: 'Application created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  /applications/private-github-app:
    post:
      tags:
        - Applications
      summary: 'Create (Private - GH App)'
      description: 'Create new application based on a private repository through a Github App.'
      operationId: create-private-github-app-application
      requestBody:
        description: 'Application object that needs to be created.'
        required: true
        content:
          application/json:
            schema:
              required:
                - project_uuid
                - server_uuid
                - environment_name
                - environment_uuid
                - github_app_uuid
                - git_repository
                - git_branch
                - build_pack
                - ports_exposes
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                github_app_uuid:
                  type: string
                  description: 'The Github App UUID.'
                git_repository:
                  type: string
                  description: 'The git repository URL.'
                git_branch:
                  type: string
                  description: 'The git branch.'
                ports_exposes:
                  type: string
                  description: 'The ports to expose.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                build_pack:
                  type: string
                  enum: [nixpacks, static, dockerfile, dockercompose]
                  description: 'The build pack type.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                domains:
                  type: string
                  description: 'The application domains.'
                git_commit_sha:
                  type: string
                  description: 'The git commit SHA.'
                docker_registry_image_name:
                  type: string
                  description: 'The docker registry image name.'
                docker_registry_image_tag:
                  type: string
                  description: 'The docker registry image tag.'
                is_static:
                  type: boolean
                  description: 'The flag to indicate if the application is static.'
                static_image:
                  type: string
                  enum: ['nginx:alpine']
                  description: 'The static image.'
                install_command:
                  type: string
                  description: 'The install command.'
                build_command:
                  type: string
                  description: 'The build command.'
                start_command:
                  type: string
                  description: 'The start command.'
                ports_mappings:
                  type: string
                  description: 'The ports mappings.'
                base_directory:
                  type: string
                  description: 'The base directory for all commands.'
                publish_directory:
                  type: string
                  description: 'The publish directory.'
                health_check_enabled:
                  type: boolean
                  description: 'Health check enabled.'
                health_check_path:
                  type: string
                  description: 'Health check path.'
                health_check_port:
                  type: string
                  nullable: true
                  description: 'Health check port.'
                health_check_host:
                  type: string
                  nullable: true
                  description: 'Health check host.'
                health_check_method:
                  type: string
                  description: 'Health check method.'
                health_check_return_code:
                  type: integer
                  description: 'Health check return code.'
                health_check_scheme:
                  type: string
                  description: 'Health check scheme.'
                health_check_response_text:
                  type: string
                  nullable: true
                  description: 'Health check response text.'
                health_check_interval:
                  type: integer
                  description: 'Health check interval in seconds.'
                health_check_timeout:
                  type: integer
                  description: 'Health check timeout in seconds.'
                health_check_retries:
                  type: integer
                  description: 'Health check retries count.'
                health_check_start_period:
                  type: integer
                  description: 'Health check start period in seconds.'
                limits_memory:
                  type: string
                  description: 'Memory limit.'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit.'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness.'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation.'
                limits_cpus:
                  type: string
                  description: 'CPU limit.'
                limits_cpuset:
                  type: string
                  nullable: true
                  description: 'CPU set.'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares.'
                custom_labels:
                  type: string
                  description: 'Custom labels.'
                custom_docker_run_options:
                  type: string
                  description: 'Custom docker run options.'
                post_deployment_command:
                  type: string
                  description: 'Post deployment command.'
                post_deployment_command_container:
                  type: string
                  description: 'Post deployment command container.'
                pre_deployment_command:
                  type: string
                  description: 'Pre deployment command.'
                pre_deployment_command_container:
                  type: string
                  description: 'Pre deployment command container.'
                manual_webhook_secret_github:
                  type: string
                  description: 'Manual webhook secret for Github.'
                manual_webhook_secret_gitlab:
                  type: string
                  description: 'Manual webhook secret for Gitlab.'
                manual_webhook_secret_bitbucket:
                  type: string
                  description: 'Manual webhook secret for Bitbucket.'
                manual_webhook_secret_gitea:
                  type: string
                  description: 'Manual webhook secret for Gitea.'
                redirect:
                  type: string
                  nullable: true
                  description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
                  enum: [www, non-www, both]
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                dockerfile:
                  type: string
                  description: 'The Dockerfile content.'
                docker_compose_location:
                  type: string
                  description: 'The Docker Compose location.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
                docker_compose_custom_start_command:
                  type: string
                  description: 'The Docker Compose custom start command.'
                docker_compose_custom_build_command:
                  type: string
                  description: 'The Docker Compose custom build command.'
                docker_compose_domains:
                  type: array
                  description: 'The Docker Compose domains.'
                watch_paths:
                  type: string
                  description: 'The watch paths.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                is_http_basic_auth_enabled:
                  type: boolean
                  description: 'HTTP Basic Authentication enabled.'
                http_basic_auth_username:
                  type: string
                  nullable: true
                  description: 'Username for HTTP Basic Authentication'
                http_basic_auth_password:
                  type: string
                  nullable: true
                  description: 'Password for HTTP Basic Authentication'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '201':
          description: 'Application created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  /applications/private-deploy-key:
    post:
      tags:
        - Applications
      summary: 'Create (Private - Deploy Key)'
      description: 'Create new application based on a private repository through a Deploy Key.'
      operationId: create-private-deploy-key-application
      requestBody:
        description: 'Application object that needs to be created.'
        required: true
        content:
          application/json:
            schema:
              required:
                - project_uuid
                - server_uuid
                - environment_name
                - environment_uuid
                - private_key_uuid
                - git_repository
                - git_branch
                - build_pack
                - ports_exposes
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                private_key_uuid:
                  type: string
                  description: 'The private key UUID.'
                git_repository:
                  type: string
                  description: 'The git repository URL.'
                git_branch:
                  type: string
                  description: 'The git branch.'
                ports_exposes:
                  type: string
                  description: 'The ports to expose.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                build_pack:
                  type: string
                  enum: [nixpacks, static, dockerfile, dockercompose]
                  description: 'The build pack type.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                domains:
                  type: string
                  description: 'The application domains.'
                git_commit_sha:
                  type: string
                  description: 'The git commit SHA.'
                docker_registry_image_name:
                  type: string
                  description: 'The docker registry image name.'
                docker_registry_image_tag:
                  type: string
                  description: 'The docker registry image tag.'
                is_static:
                  type: boolean
                  description: 'The flag to indicate if the application is static.'
                static_image:
                  type: string
                  enum: ['nginx:alpine']
                  description: 'The static image.'
                install_command:
                  type: string
                  description: 'The install command.'
                build_command:
                  type: string
                  description: 'The build command.'
                start_command:
                  type: string
                  description: 'The start command.'
                ports_mappings:
                  type: string
                  description: 'The ports mappings.'
                base_directory:
                  type: string
                  description: 'The base directory for all commands.'
                publish_directory:
                  type: string
                  description: 'The publish directory.'
                health_check_enabled:
                  type: boolean
                  description: 'Health check enabled.'
                health_check_path:
                  type: string
                  description: 'Health check path.'
                health_check_port:
                  type: string
                  nullable: true
                  description: 'Health check port.'
                health_check_host:
                  type: string
                  nullable: true
                  description: 'Health check host.'
                health_check_method:
                  type: string
                  description: 'Health check method.'
                health_check_return_code:
                  type: integer
                  description: 'Health check return code.'
                health_check_scheme:
                  type: string
                  description: 'Health check scheme.'
                health_check_response_text:
                  type: string
                  nullable: true
                  description: 'Health check response text.'
                health_check_interval:
                  type: integer
                  description: 'Health check interval in seconds.'
                health_check_timeout:
                  type: integer
                  description: 'Health check timeout in seconds.'
                health_check_retries:
                  type: integer
                  description: 'Health check retries count.'
                health_check_start_period:
                  type: integer
                  description: 'Health check start period in seconds.'
                limits_memory:
                  type: string
                  description: 'Memory limit.'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit.'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness.'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation.'
                limits_cpus:
                  type: string
                  description: 'CPU limit.'
                limits_cpuset:
                  type: string
                  nullable: true
                  description: 'CPU set.'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares.'
                custom_labels:
                  type: string
                  description: 'Custom labels.'
                custom_docker_run_options:
                  type: string
                  description: 'Custom docker run options.'
                post_deployment_command:
                  type: string
                  description: 'Post deployment command.'
                post_deployment_command_container:
                  type: string
                  description: 'Post deployment command container.'
                pre_deployment_command:
                  type: string
                  description: 'Pre deployment command.'
                pre_deployment_command_container:
                  type: string
                  description: 'Pre deployment command container.'
                manual_webhook_secret_github:
                  type: string
                  description: 'Manual webhook secret for Github.'
                manual_webhook_secret_gitlab:
                  type: string
                  description: 'Manual webhook secret for Gitlab.'
                manual_webhook_secret_bitbucket:
                  type: string
                  description: 'Manual webhook secret for Bitbucket.'
                manual_webhook_secret_gitea:
                  type: string
                  description: 'Manual webhook secret for Gitea.'
                redirect:
                  type: string
                  nullable: true
                  description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
                  enum: [www, non-www, both]
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                dockerfile:
                  type: string
                  description: 'The Dockerfile content.'
                docker_compose_location:
                  type: string
                  description: 'The Docker Compose location.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
                docker_compose_custom_start_command:
                  type: string
                  description: 'The Docker Compose custom start command.'
                docker_compose_custom_build_command:
                  type: string
                  description: 'The Docker Compose custom build command.'
                docker_compose_domains:
                  type: array
                  description: 'The Docker Compose domains.'
                watch_paths:
                  type: string
                  description: 'The watch paths.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                is_http_basic_auth_enabled:
                  type: boolean
                  description: 'HTTP Basic Authentication enabled.'
                http_basic_auth_username:
                  type: string
                  nullable: true
                  description: 'Username for HTTP Basic Authentication'
                http_basic_auth_password:
                  type: string
                  nullable: true
                  description: 'Password for HTTP Basic Authentication'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '201':
          description: 'Application created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  /applications/dockerfile:
    post:
      tags:
        - Applications
      summary: 'Create (Dockerfile)'
      description: 'Create new application based on a simple Dockerfile.'
      operationId: create-dockerfile-application
      requestBody:
        description: 'Application object that needs to be created.'
        required: true
        content:
          application/json:
            schema:
              required:
                - project_uuid
                - server_uuid
                - environment_name
                - environment_uuid
                - dockerfile
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                dockerfile:
                  type: string
                  description: 'The Dockerfile content.'
                build_pack:
                  type: string
                  enum: [nixpacks, static, dockerfile, dockercompose]
                  description: 'The build pack type.'
                ports_exposes:
                  type: string
                  description: 'The ports to expose.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                domains:
                  type: string
                  description: 'The application domains.'
                docker_registry_image_name:
                  type: string
                  description: 'The docker registry image name.'
                docker_registry_image_tag:
                  type: string
                  description: 'The docker registry image tag.'
                ports_mappings:
                  type: string
                  description: 'The ports mappings.'
                base_directory:
                  type: string
                  description: 'The base directory for all commands.'
                health_check_enabled:
                  type: boolean
                  description: 'Health check enabled.'
                health_check_path:
                  type: string
                  description: 'Health check path.'
                health_check_port:
                  type: string
                  nullable: true
                  description: 'Health check port.'
                health_check_host:
                  type: string
                  nullable: true
                  description: 'Health check host.'
                health_check_method:
                  type: string
                  description: 'Health check method.'
                health_check_return_code:
                  type: integer
                  description: 'Health check return code.'
                health_check_scheme:
                  type: string
                  description: 'Health check scheme.'
                health_check_response_text:
                  type: string
                  nullable: true
                  description: 'Health check response text.'
                health_check_interval:
                  type: integer
                  description: 'Health check interval in seconds.'
                health_check_timeout:
                  type: integer
                  description: 'Health check timeout in seconds.'
                health_check_retries:
                  type: integer
                  description: 'Health check retries count.'
                health_check_start_period:
                  type: integer
                  description: 'Health check start period in seconds.'
                limits_memory:
                  type: string
                  description: 'Memory limit.'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit.'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness.'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation.'
                limits_cpus:
                  type: string
                  description: 'CPU limit.'
                limits_cpuset:
                  type: string
                  nullable: true
                  description: 'CPU set.'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares.'
                custom_labels:
                  type: string
                  description: 'Custom labels.'
                custom_docker_run_options:
                  type: string
                  description: 'Custom docker run options.'
                post_deployment_command:
                  type: string
                  description: 'Post deployment command.'
                post_deployment_command_container:
                  type: string
                  description: 'Post deployment command container.'
                pre_deployment_command:
                  type: string
                  description: 'Pre deployment command.'
                pre_deployment_command_container:
                  type: string
                  description: 'Pre deployment command container.'
                manual_webhook_secret_github:
                  type: string
                  description: 'Manual webhook secret for Github.'
                manual_webhook_secret_gitlab:
                  type: string
                  description: 'Manual webhook secret for Gitlab.'
                manual_webhook_secret_bitbucket:
                  type: string
                  description: 'Manual webhook secret for Bitbucket.'
                manual_webhook_secret_gitea:
                  type: string
                  description: 'Manual webhook secret for Gitea.'
                redirect:
                  type: string
                  nullable: true
                  description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
                  enum: [www, non-www, both]
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                is_http_basic_auth_enabled:
                  type: boolean
                  description: 'HTTP Basic Authentication enabled.'
                http_basic_auth_username:
                  type: string
                  nullable: true
                  description: 'Username for HTTP Basic Authentication'
                http_basic_auth_password:
                  type: string
                  nullable: true
                  description: 'Password for HTTP Basic Authentication'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '201':
          description: 'Application created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  /applications/dockerimage:
    post:
      tags:
        - Applications
      summary: 'Create (Docker Image)'
      description: 'Create new application based on a prebuilt docker image'
      operationId: create-dockerimage-application
      requestBody:
        description: 'Application object that needs to be created.'
        required: true
        content:
          application/json:
            schema:
              required:
                - project_uuid
                - server_uuid
                - environment_name
                - environment_uuid
                - docker_registry_image_name
                - ports_exposes
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                docker_registry_image_name:
                  type: string
                  description: 'The docker registry image name.'
                docker_registry_image_tag:
                  type: string
                  description: 'The docker registry image tag.'
                ports_exposes:
                  type: string
                  description: 'The ports to expose.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                domains:
                  type: string
                  description: 'The application domains.'
                ports_mappings:
                  type: string
                  description: 'The ports mappings.'
                health_check_enabled:
                  type: boolean
                  description: 'Health check enabled.'
                health_check_path:
                  type: string
                  description: 'Health check path.'
                health_check_port:
                  type: string
                  nullable: true
                  description: 'Health check port.'
                health_check_host:
                  type: string
                  nullable: true
                  description: 'Health check host.'
                health_check_method:
                  type: string
                  description: 'Health check method.'
                health_check_return_code:
                  type: integer
                  description: 'Health check return code.'
                health_check_scheme:
                  type: string
                  description: 'Health check scheme.'
                health_check_response_text:
                  type: string
                  nullable: true
                  description: 'Health check response text.'
                health_check_interval:
                  type: integer
                  description: 'Health check interval in seconds.'
                health_check_timeout:
                  type: integer
                  description: 'Health check timeout in seconds.'
                health_check_retries:
                  type: integer
                  description: 'Health check retries count.'
                health_check_start_period:
                  type: integer
                  description: 'Health check start period in seconds.'
                limits_memory:
                  type: string
                  description: 'Memory limit.'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit.'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness.'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation.'
                limits_cpus:
                  type: string
                  description: 'CPU limit.'
                limits_cpuset:
                  type: string
                  nullable: true
                  description: 'CPU set.'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares.'
                custom_labels:
                  type: string
                  description: 'Custom labels.'
                custom_docker_run_options:
                  type: string
                  description: 'Custom docker run options.'
                post_deployment_command:
                  type: string
                  description: 'Post deployment command.'
                post_deployment_command_container:
                  type: string
                  description: 'Post deployment command container.'
                pre_deployment_command:
                  type: string
                  description: 'Pre deployment command.'
                pre_deployment_command_container:
                  type: string
                  description: 'Pre deployment command container.'
                manual_webhook_secret_github:
                  type: string
                  description: 'Manual webhook secret for Github.'
                manual_webhook_secret_gitlab:
                  type: string
                  description: 'Manual webhook secret for Gitlab.'
                manual_webhook_secret_bitbucket:
                  type: string
                  description: 'Manual webhook secret for Bitbucket.'
                manual_webhook_secret_gitea:
                  type: string
                  description: 'Manual webhook secret for Gitea.'
                redirect:
                  type: string
                  nullable: true
                  description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
                  enum: [www, non-www, both]
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                is_http_basic_auth_enabled:
                  type: boolean
                  description: 'HTTP Basic Authentication enabled.'
                http_basic_auth_username:
                  type: string
                  nullable: true
                  description: 'Username for HTTP Basic Authentication'
                http_basic_auth_password:
                  type: string
                  nullable: true
                  description: 'Password for HTTP Basic Authentication'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '201':
          description: 'Application created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  /applications/dockercompose:
    post:
      tags:
        - Applications
      summary: 'Create (Docker Compose)'
      description: 'Create new application based on a docker-compose file.'
      operationId: create-dockercompose-application
      requestBody:
        description: 'Application object that needs to be created.'
        required: true
        content:
          application/json:
            schema:
              required:
                - project_uuid
                - server_uuid
                - environment_name
                - environment_uuid
                - docker_compose_raw
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID if the server has more than one destinations.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '201':
          description: 'Application created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  '/applications/{uuid}':
    get:
      tags:
        - Applications
      summary: Get
      description: 'Get application by UUID.'
      operationId: get-application-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Get application by UUID.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    delete:
      tags:
        - Applications
      summary: Delete
      description: 'Delete application by UUID.'
      operationId: delete-application-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: delete_configurations
          in: query
          description: 'Delete configurations.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: delete_volumes
          in: query
          description: 'Delete volumes.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: docker_cleanup
          in: query
          description: 'Run docker cleanup.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: delete_connected_networks
          in: query
          description: 'Delete connected networks.'
          required: false
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: 'Application deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Application deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Applications
      summary: Update
      description: 'Update application by UUID.'
      operationId: update-application-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Application updated.'
        required: true
        content:
          application/json:
            schema:
              properties:
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                environment_name:
                  type: string
                  description: 'The environment name.'
                github_app_uuid:
                  type: string
                  description: 'The Github App UUID.'
                git_repository:
                  type: string
                  description: 'The git repository URL.'
                git_branch:
                  type: string
                  description: 'The git branch.'
                ports_exposes:
                  type: string
                  description: 'The ports to expose.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                build_pack:
                  type: string
                  enum: [nixpacks, static, dockerfile, dockercompose]
                  description: 'The build pack type.'
                name:
                  type: string
                  description: 'The application name.'
                description:
                  type: string
                  description: 'The application description.'
                domains:
                  type: string
                  description: 'The application domains.'
                git_commit_sha:
                  type: string
                  description: 'The git commit SHA.'
                docker_registry_image_name:
                  type: string
                  description: 'The docker registry image name.'
                docker_registry_image_tag:
                  type: string
                  description: 'The docker registry image tag.'
                is_static:
                  type: boolean
                  description: 'The flag to indicate if the application is static.'
                install_command:
                  type: string
                  description: 'The install command.'
                build_command:
                  type: string
                  description: 'The build command.'
                start_command:
                  type: string
                  description: 'The start command.'
                ports_mappings:
                  type: string
                  description: 'The ports mappings.'
                base_directory:
                  type: string
                  description: 'The base directory for all commands.'
                publish_directory:
                  type: string
                  description: 'The publish directory.'
                health_check_enabled:
                  type: boolean
                  description: 'Health check enabled.'
                health_check_path:
                  type: string
                  description: 'Health check path.'
                health_check_port:
                  type: string
                  nullable: true
                  description: 'Health check port.'
                health_check_host:
                  type: string
                  nullable: true
                  description: 'Health check host.'
                health_check_method:
                  type: string
                  description: 'Health check method.'
                health_check_return_code:
                  type: integer
                  description: 'Health check return code.'
                health_check_scheme:
                  type: string
                  description: 'Health check scheme.'
                health_check_response_text:
                  type: string
                  nullable: true
                  description: 'Health check response text.'
                health_check_interval:
                  type: integer
                  description: 'Health check interval in seconds.'
                health_check_timeout:
                  type: integer
                  description: 'Health check timeout in seconds.'
                health_check_retries:
                  type: integer
                  description: 'Health check retries count.'
                health_check_start_period:
                  type: integer
                  description: 'Health check start period in seconds.'
                limits_memory:
                  type: string
                  description: 'Memory limit.'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit.'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness.'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation.'
                limits_cpus:
                  type: string
                  description: 'CPU limit.'
                limits_cpuset:
                  type: string
                  nullable: true
                  description: 'CPU set.'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares.'
                custom_labels:
                  type: string
                  description: 'Custom labels.'
                custom_docker_run_options:
                  type: string
                  description: 'Custom docker run options.'
                post_deployment_command:
                  type: string
                  description: 'Post deployment command.'
                post_deployment_command_container:
                  type: string
                  description: 'Post deployment command container.'
                pre_deployment_command:
                  type: string
                  description: 'Pre deployment command.'
                pre_deployment_command_container:
                  type: string
                  description: 'Pre deployment command container.'
                manual_webhook_secret_github:
                  type: string
                  description: 'Manual webhook secret for Github.'
                manual_webhook_secret_gitlab:
                  type: string
                  description: 'Manual webhook secret for Gitlab.'
                manual_webhook_secret_bitbucket:
                  type: string
                  description: 'Manual webhook secret for Bitbucket.'
                manual_webhook_secret_gitea:
                  type: string
                  description: 'Manual webhook secret for Gitea.'
                redirect:
                  type: string
                  nullable: true
                  description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
                  enum: [www, non-www, both]
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the application should be deployed instantly.'
                dockerfile:
                  type: string
                  description: 'The Dockerfile content.'
                docker_compose_location:
                  type: string
                  description: 'The Docker Compose location.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
                docker_compose_custom_start_command:
                  type: string
                  description: 'The Docker Compose custom start command.'
                docker_compose_custom_build_command:
                  type: string
                  description: 'The Docker Compose custom build command.'
                docker_compose_domains:
                  type: array
                  description: 'The Docker Compose domains.'
                watch_paths:
                  type: string
                  description: 'The watch paths.'
                use_build_server:
                  type: boolean
                  nullable: true
                  description: 'Use build server.'
                connect_to_docker_network:
                  type: boolean
                  description: 'The flag to connect the service to the predefined Docker network.'
                force_domain_override:
                  type: boolean
                  description: 'Force domain usage even if conflicts are detected. Default is false.'
              type: object
      responses:
        '200':
          description: 'Application updated.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
        '409':
          description: 'Domain conflicts detected.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Domain conflicts detected. Use force_domain_override=true to proceed.' }
                  warning: { type: string, example: 'Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.' }
                  conflicts: { type: array, items: { properties: { domain: { type: string, example: example.com }, resource_name: { type: string, example: 'My Application' }, resource_uuid: { type: string, nullable: true, example: abc123-def456 }, resource_type: { type: string, enum: [application, service, instance], example: application }, message: { type: string, example: "Domain example.com is already in use by application 'My Application'" } }, type: object } }
                type: object
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/logs':
    get:
      tags:
        - Applications
      summary: 'Get application logs.'
      description: 'Get application logs by UUID.'
      operationId: get-application-logs-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: lines
          in: query
          description: 'Number of lines to show from the end of the logs.'
          required: false
          schema:
            type: integer
            format: int32
            default: 100
      responses:
        '200':
          description: 'Get application logs by UUID.'
          content:
            application/json:
              schema:
                properties:
                  logs: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/envs':
    get:
      tags:
        - Applications
      summary: 'List Envs'
      description: 'List all envs by application UUID.'
      operationId: list-envs-by-application-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'All environment variables by application UUID.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EnvironmentVariable'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - Applications
      summary: 'Create Env'
      description: 'Create env by application UUID.'
      operationId: create-env-by-application-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Env created.'
        required: true
        content:
          application/json:
            schema:
              properties:
                key:
                  type: string
                  description: 'The key of the environment variable.'
                value:
                  type: string
                  description: 'The value of the environment variable.'
                is_preview:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is used in preview deployments.'
                is_literal:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is a literal, nothing espaced.'
                is_multiline:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is multiline.'
                is_shown_once:
                  type: boolean
                  description: "The flag to indicate if the environment variable's value is shown on the UI."
              type: object
      responses:
        '201':
          description: 'Environment variable created.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, example: nc0k04gk8g0cgsk440g0koko }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Applications
      summary: 'Update Env'
      description: 'Update env by application UUID.'
      operationId: update-env-by-application-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Env updated.'
        required: true
        content:
          application/json:
            schema:
              required:
                - key
                - value
              properties:
                key:
                  type: string
                  description: 'The key of the environment variable.'
                value:
                  type: string
                  description: 'The value of the environment variable.'
                is_preview:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is used in preview deployments.'
                is_literal:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is a literal, nothing espaced.'
                is_multiline:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is multiline.'
                is_shown_once:
                  type: boolean
                  description: "The flag to indicate if the environment variable's value is shown on the UI."
              type: object
      responses:
        '201':
          description: 'Environment variable updated.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment variable updated.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/envs/bulk':
    patch:
      tags:
        - Applications
      summary: 'Update Envs (Bulk)'
      description: 'Update multiple envs by application UUID.'
      operationId: update-envs-by-application-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Bulk envs updated.'
        required: true
        content:
          application/json:
            schema:
              required:
                - data
              properties:
                data:
                  type: array
                  items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_preview: { type: boolean, description: 'The flag to indicate if the environment variable is used in preview deployments.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: "The flag to indicate if the environment variable's value is shown on the UI." } }, type: object }
              type: object
      responses:
        '201':
          description: 'Environment variables updated.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment variables updated.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/envs/{env_uuid}':
    delete:
      tags:
        - Applications
      summary: 'Delete Env'
      description: 'Delete env by UUID.'
      operationId: delete-env-by-application-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: env_uuid
          in: path
          description: 'UUID of the environment variable.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Environment variable deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment variable deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/start':
    get:
      tags:
        - Applications
      summary: Start
      description: 'Start application. `Post` request is also accepted.'
      operationId: start-application-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: force
          in: query
          description: 'Force rebuild.'
          schema:
            type: boolean
            default: false
        -
          name: instant_deploy
          in: query
          description: 'Instant deploy (skip queuing).'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: 'Start application.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Deployment request queued.', description: Message. }
                  deployment_uuid: { type: string, example: doogksw, description: 'UUID of the deployment.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/stop':
    get:
      tags:
        - Applications
      summary: Stop
      description: 'Stop application. `Post` request is also accepted.'
      operationId: stop-application-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Stop application.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Application stopping request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/applications/{uuid}/restart':
    get:
      tags:
        - Applications
      summary: Restart
      description: 'Restart application. `Post` request is also accepted.'
      operationId: restart-application-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Restart application.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Restart request queued.' }
                  deployment_uuid: { type: string, example: doogksw, description: 'UUID of the deployment.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /databases:
    get:
      tags:
        - Databases
      summary: List
      description: 'List all databases.'
      operationId: list-databases
      responses:
        '200':
          description: 'Get all databases'
          content:
            application/json:
              schema:
                type: string
              example: 'Content is very complex. Will be implemented later.'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/databases/{uuid}':
    get:
      tags:
        - Databases
      summary: Get
      description: 'Get database by UUID.'
      operationId: get-database-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the database.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Get all databases'
          content:
            application/json:
              schema:
                type: string
              example: 'Content is very complex. Will be implemented later.'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    delete:
      tags:
        - Databases
      summary: Delete
      description: 'Delete database by UUID.'
      operationId: delete-database-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the database.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: delete_configurations
          in: query
          description: 'Delete configurations.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: delete_volumes
          in: query
          description: 'Delete volumes.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: docker_cleanup
          in: query
          description: 'Run docker cleanup.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: delete_connected_networks
          in: query
          description: 'Delete connected networks.'
          required: false
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: 'Database deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Database deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Databases
      summary: Update
      description: 'Update database by UUID.'
      operationId: update-database-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the database.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                postgres_user:
                  type: string
                  description: 'PostgreSQL user'
                postgres_password:
                  type: string
                  description: 'PostgreSQL password'
                postgres_db:
                  type: string
                  description: 'PostgreSQL database'
                postgres_initdb_args:
                  type: string
                  description: 'PostgreSQL initdb args'
                postgres_host_auth_method:
                  type: string
                  description: 'PostgreSQL host auth method'
                postgres_conf:
                  type: string
                  description: 'PostgreSQL conf'
                clickhouse_admin_user:
                  type: string
                  description: 'Clickhouse admin user'
                clickhouse_admin_password:
                  type: string
                  description: 'Clickhouse admin password'
                dragonfly_password:
                  type: string
                  description: 'DragonFly password'
                redis_password:
                  type: string
                  description: 'Redis password'
                redis_conf:
                  type: string
                  description: 'Redis conf'
                keydb_password:
                  type: string
                  description: 'KeyDB password'
                keydb_conf:
                  type: string
                  description: 'KeyDB conf'
                mariadb_conf:
                  type: string
                  description: 'MariaDB conf'
                mariadb_root_password:
                  type: string
                  description: 'MariaDB root password'
                mariadb_user:
                  type: string
                  description: 'MariaDB user'
                mariadb_password:
                  type: string
                  description: 'MariaDB password'
                mariadb_database:
                  type: string
                  description: 'MariaDB database'
                mongo_conf:
                  type: string
                  description: 'Mongo conf'
                mongo_initdb_root_username:
                  type: string
                  description: 'Mongo initdb root username'
                mongo_initdb_root_password:
                  type: string
                  description: 'Mongo initdb root password'
                mongo_initdb_database:
                  type: string
                  description: 'Mongo initdb init database'
                mysql_root_password:
                  type: string
                  description: 'MySQL root password'
                mysql_password:
                  type: string
                  description: 'MySQL password'
                mysql_user:
                  type: string
                  description: 'MySQL user'
                mysql_database:
                  type: string
                  description: 'MySQL database'
                mysql_conf:
                  type: string
                  description: 'MySQL conf'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /databases/postgresql:
    post:
      tags:
        - Databases
      summary: 'Create (PostgreSQL)'
      description: 'Create a new PostgreSQL database.'
      operationId: create-database-postgresql
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                postgres_user:
                  type: string
                  description: 'PostgreSQL user'
                postgres_password:
                  type: string
                  description: 'PostgreSQL password'
                postgres_db:
                  type: string
                  description: 'PostgreSQL database'
                postgres_initdb_args:
                  type: string
                  description: 'PostgreSQL initdb args'
                postgres_host_auth_method:
                  type: string
                  description: 'PostgreSQL host auth method'
                postgres_conf:
                  type: string
                  description: 'PostgreSQL conf'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/clickhouse:
    post:
      tags:
        - Databases
      summary: 'Create (Clickhouse)'
      description: 'Create a new Clickhouse database.'
      operationId: create-database-clickhouse
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                clickhouse_admin_user:
                  type: string
                  description: 'Clickhouse admin user'
                clickhouse_admin_password:
                  type: string
                  description: 'Clickhouse admin password'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/dragonfly:
    post:
      tags:
        - Databases
      summary: 'Create (DragonFly)'
      description: 'Create a new DragonFly database.'
      operationId: create-database-dragonfly
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                dragonfly_password:
                  type: string
                  description: 'DragonFly password'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/redis:
    post:
      tags:
        - Databases
      summary: 'Create (Redis)'
      description: 'Create a new Redis database.'
      operationId: create-database-redis
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                redis_password:
                  type: string
                  description: 'Redis password'
                redis_conf:
                  type: string
                  description: 'Redis conf'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/keydb:
    post:
      tags:
        - Databases
      summary: 'Create (KeyDB)'
      description: 'Create a new KeyDB database.'
      operationId: create-database-keydb
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                keydb_password:
                  type: string
                  description: 'KeyDB password'
                keydb_conf:
                  type: string
                  description: 'KeyDB conf'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/mariadb:
    post:
      tags:
        - Databases
      summary: 'Create (MariaDB)'
      description: 'Create a new MariaDB database.'
      operationId: create-database-mariadb
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                mariadb_conf:
                  type: string
                  description: 'MariaDB conf'
                mariadb_root_password:
                  type: string
                  description: 'MariaDB root password'
                mariadb_user:
                  type: string
                  description: 'MariaDB user'
                mariadb_password:
                  type: string
                  description: 'MariaDB password'
                mariadb_database:
                  type: string
                  description: 'MariaDB database'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/mysql:
    post:
      tags:
        - Databases
      summary: 'Create (MySQL)'
      description: 'Create a new MySQL database.'
      operationId: create-database-mysql
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                mysql_root_password:
                  type: string
                  description: 'MySQL root password'
                mysql_password:
                  type: string
                  description: 'MySQL password'
                mysql_user:
                  type: string
                  description: 'MySQL user'
                mysql_database:
                  type: string
                  description: 'MySQL database'
                mysql_conf:
                  type: string
                  description: 'MySQL conf'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /databases/mongodb:
    post:
      tags:
        - Databases
      summary: 'Create (MongoDB)'
      description: 'Create a new MongoDB database.'
      operationId: create-database-mongodb
      requestBody:
        description: 'Database data'
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                server_uuid:
                  type: string
                  description: 'UUID of the server'
                project_uuid:
                  type: string
                  description: 'UUID of the project'
                environment_name:
                  type: string
                  description: 'Name of the environment. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'UUID of the environment. You need to provide at least one of environment_name or environment_uuid.'
                destination_uuid:
                  type: string
                  description: 'UUID of the destination if the server has multiple destinations'
                mongo_conf:
                  type: string
                  description: 'MongoDB conf'
                mongo_initdb_root_username:
                  type: string
                  description: 'MongoDB initdb root username'
                name:
                  type: string
                  description: 'Name of the database'
                description:
                  type: string
                  description: 'Description of the database'
                image:
                  type: string
                  description: 'Docker Image of the database'
                is_public:
                  type: boolean
                  description: 'Is the database public?'
                public_port:
                  type: integer
                  description: 'Public port of the database'
                limits_memory:
                  type: string
                  description: 'Memory limit of the database'
                limits_memory_swap:
                  type: string
                  description: 'Memory swap limit of the database'
                limits_memory_swappiness:
                  type: integer
                  description: 'Memory swappiness of the database'
                limits_memory_reservation:
                  type: string
                  description: 'Memory reservation of the database'
                limits_cpus:
                  type: string
                  description: 'CPU limit of the database'
                limits_cpuset:
                  type: string
                  description: 'CPU set of the database'
                limits_cpu_shares:
                  type: integer
                  description: 'CPU shares of the database'
                instant_deploy:
                  type: boolean
                  description: 'Instant deploy the database'
              type: object
      responses:
        '200':
          description: 'Database updated'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/databases/{uuid}/start':
    get:
      tags:
        - Databases
      summary: Start
      description: 'Start database. `Post` request is also accepted.'
      operationId: start-database-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the database.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Start database.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Database starting request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/databases/{uuid}/stop':
    get:
      tags:
        - Databases
      summary: Stop
      description: 'Stop database. `Post` request is also accepted.'
      operationId: stop-database-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the database.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Stop database.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Database stopping request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/databases/{uuid}/restart':
    get:
      tags:
        - Databases
      summary: Restart
      description: 'Restart database. `Post` request is also accepted.'
      operationId: restart-database-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the database.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Restart database.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Database restaring request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /deployments:
    get:
      tags:
        - Deployments
      summary: List
      description: 'List currently running deployments'
      operationId: list-deployments
      responses:
        '200':
          description: 'Get all currently running deployments.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApplicationDeploymentQueue'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/deployments/{uuid}':
    get:
      tags:
        - Deployments
      summary: Get
      description: 'Get deployment by UUID.'
      operationId: get-deployment-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Deployment UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Get deployment by UUID.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationDeploymentQueue'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /deploy:
    get:
      tags:
        - Deployments
      summary: Deploy
      description: 'Deploy by tag or uuid. `Post` request also accepted with `uuid` and `tag` json body.'
      operationId: deploy-by-tag-or-uuid
      parameters:
        -
          name: tag
          in: query
          description: 'Tag name(s). Comma separated list is also accepted.'
          schema:
            type: string
        -
          name: uuid
          in: query
          description: 'Resource UUID(s). Comma separated list is also accepted.'
          schema:
            type: string
        -
          name: force
          in: query
          description: 'Force rebuild (without cache)'
          schema:
            type: boolean
        -
          name: pr
          in: query
          description: 'Pull Request Id for deploying specific PR builds. Cannot be used with tag parameter.'
          schema:
            type: integer
      responses:
        '200':
          description: "Get deployment(s) UUID's"
          content:
            application/json:
              schema:
                properties:
                  deployments: { type: array, items: { properties: { message: { type: string }, resource_uuid: { type: string }, deployment_uuid: { type: string } }, type: object } }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/deployments/applications/{uuid}':
    get:
      tags:
        - Deployments
      summary: 'List application deployments'
      description: 'List application deployments by using the app uuid'
      operationId: list-deployments-by-app-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: skip
          in: query
          description: 'Number of records to skip.'
          required: false
          schema:
            type: integer
            default: 0
            minimum: 0
        -
          name: take
          in: query
          description: 'Number of records to take.'
          required: false
          schema:
            type: integer
            default: 10
            minimum: 1
      responses:
        '200':
          description: 'List application deployments by using the app uuid.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Application'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /version:
    get:
      summary: Version
      description: 'Get Coolify version.'
      operationId: version
      responses:
        '200':
          description: 'Returns the version of the application'
          content:
            application/json:
              schema:
                type: string
              example: v4.0.0
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /enable:
    get:
      summary: 'Enable API'
      description: 'Enable API (only with root permissions).'
      operationId: enable-api
      responses:
        '200':
          description: 'Enable API.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'API enabled.' }
                type: object
        '403':
          description: 'You are not allowed to enable the API.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'You are not allowed to enable the API.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /disable:
    get:
      summary: 'Disable API'
      description: 'Disable API (only with root permissions).'
      operationId: disable-api
      responses:
        '200':
          description: 'Disable API.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'API disabled.' }
                type: object
        '403':
          description: 'You are not allowed to disable the API.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'You are not allowed to disable the API.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /health:
    get:
      summary: Healthcheck
      description: 'Healthcheck endpoint.'
      operationId: healthcheck
      responses:
        '200':
          description: 'Healthcheck endpoint.'
          content:
            application/json:
              schema:
                type: string
              example: OK
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
  /projects:
    get:
      tags:
        - Projects
      summary: List
      description: 'List projects.'
      operationId: list-projects
      responses:
        '200':
          description: 'Get all projects.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - Projects
      summary: Create
      description: 'Create Project.'
      operationId: create-project
      requestBody:
        description: 'Project created.'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: 'The name of the project.'
                description:
                  type: string
                  description: 'The description of the project.'
              type: object
      responses:
        '201':
          description: 'Project created.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, example: og888os, description: 'The UUID of the project.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/projects/{uuid}':
    get:
      tags:
        - Projects
      summary: Get
      description: 'Get project by UUID.'
      operationId: get-project-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Project UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Project details'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          description: 'Project not found.'
      security:
        -
          bearerAuth: []
    delete:
      tags:
        - Projects
      summary: Delete
      description: 'Delete project by UUID.'
      operationId: delete-project-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the application.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Project deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Project deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Projects
      summary: Update
      description: 'Update Project.'
      operationId: update-project-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the project.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Project updated.'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: 'The name of the project.'
                description:
                  type: string
                  description: 'The description of the project.'
              type: object
      responses:
        '201':
          description: 'Project updated.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, example: og888os }
                  name: { type: string, example: 'Project Name' }
                  description: { type: string, example: 'Project Description' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/projects/{uuid}/{environment_name_or_uuid}':
    get:
      tags:
        - Projects
      summary: Environment
      description: 'Get environment by name or UUID.'
      operationId: get-environment-by-name-or-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Project UUID'
          required: true
          schema:
            type: string
        -
          name: environment_name_or_uuid
          in: path
          description: 'Environment name or UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Environment details'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Environment'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/projects/{uuid}/environments':
    get:
      tags:
        - Projects
      summary: 'List Environments'
      description: 'List all environments in a project.'
      operationId: get-environments
      parameters:
        -
          name: uuid
          in: path
          description: 'Project UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'List of environments'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Environment'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          description: 'Project not found.'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - Projects
      summary: 'Create Environment'
      description: 'Create environment in project.'
      operationId: create-environment
      parameters:
        -
          name: uuid
          in: path
          description: 'Project UUID'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Environment created.'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: 'The name of the environment.'
              type: object
      responses:
        '201':
          description: 'Environment created.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, example: env123, description: 'The UUID of the environment.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          description: 'Project not found.'
        '409':
          description: 'Environment with this name already exists.'
      security:
        -
          bearerAuth: []
  '/projects/{uuid}/environments/{environment_name_or_uuid}':
    delete:
      tags:
        - Projects
      summary: 'Delete Environment'
      description: 'Delete environment by name or UUID. Environment must be empty.'
      operationId: delete-environment
      parameters:
        -
          name: uuid
          in: path
          description: 'Project UUID'
          required: true
          schema:
            type: string
        -
          name: environment_name_or_uuid
          in: path
          description: 'Environment name or UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Environment deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          description: 'Environment has resources, so it cannot be deleted.'
        '404':
          description: 'Project or environment not found.'
      security:
        -
          bearerAuth: []
  /resources:
    get:
      tags:
        - Resources
      summary: List
      description: 'Get all resources.'
      operationId: list-resources
      responses:
        '200':
          description: 'Get all resources'
          content:
            application/json:
              schema:
                type: string
              example: 'Content is very complex. Will be implemented later.'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /security/keys:
    get:
      tags:
        - 'Private Keys'
      summary: List
      description: 'List all private keys.'
      operationId: list-private-keys
      responses:
        '200':
          description: 'Get all private keys.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PrivateKey'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - 'Private Keys'
      summary: Create
      description: 'Create a new private key.'
      operationId: create-private-key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - private_key
              properties:
                name:
                  type: string
                description:
                  type: string
                private_key:
                  type: string
              type: object
              additionalProperties: false
      responses:
        '201':
          description: "The created private key's UUID."
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - 'Private Keys'
      summary: Update
      description: 'Update a private key.'
      operationId: update-private-key
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - private_key
              properties:
                name:
                  type: string
                description:
                  type: string
                private_key:
                  type: string
              type: object
              additionalProperties: false
      responses:
        '201':
          description: "The updated private key's UUID."
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/security/keys/{uuid}':
    get:
      tags:
        - 'Private Keys'
      summary: Get
      description: 'Get key by UUID.'
      operationId: get-private-key-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Private Key UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Get all private keys.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrivateKey'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          description: 'Private Key not found.'
      security:
        -
          bearerAuth: []
    delete:
      tags:
        - 'Private Keys'
      summary: Delete
      description: 'Delete a private key.'
      operationId: delete-private-key-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Private Key UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Private Key deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Private Key deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          description: 'Private Key not found.'
        '422':
          description: 'Private Key is in use and cannot be deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Private Key is in use and cannot be deleted.' }
                type: object
      security:
        -
          bearerAuth: []
  /servers:
    get:
      tags:
        - Servers
      summary: List
      description: 'List all servers.'
      operationId: list-servers
      responses:
        '200':
          description: 'Get all servers.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Server'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - Servers
      summary: Create
      description: 'Create Server.'
      operationId: create-server
      requestBody:
        description: 'Server created.'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  example: 'My Server'
                  description: 'The name of the server.'
                description:
                  type: string
                  example: 'My Server Description'
                  description: 'The description of the server.'
                ip:
                  type: string
                  example: 127.0.0.1
                  description: 'The IP of the server.'
                port:
                  type: integer
                  example: 22
                  description: 'The port of the server.'
                user:
                  type: string
                  example: root
                  description: 'The user of the server.'
                private_key_uuid:
                  type: string
                  example: og888os
                  description: 'The UUID of the private key.'
                is_build_server:
                  type: boolean
                  example: false
                  description: 'Is build server.'
                instant_validate:
                  type: boolean
                  example: false
                  description: 'Instant validate.'
                proxy_type:
                  type: string
                  enum: [traefik, caddy, none]
                  example: traefik
                  description: 'The proxy type.'
              type: object
      responses:
        '201':
          description: 'Server created.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, example: og888os, description: 'The UUID of the server.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/servers/{uuid}':
    get:
      tags:
        - Servers
      summary: Get
      description: 'Get server by UUID.'
      operationId: get-server-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: "Server's UUID"
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Get server by UUID'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Server'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    delete:
      tags:
        - Servers
      summary: Delete
      description: 'Delete server by UUID.'
      operationId: delete-server-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the server.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Server deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Server deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Servers
      summary: Update
      description: 'Update Server.'
      operationId: update-server-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Server UUID'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Server updated.'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: 'The name of the server.'
                description:
                  type: string
                  description: 'The description of the server.'
                ip:
                  type: string
                  description: 'The IP of the server.'
                port:
                  type: integer
                  description: 'The port of the server.'
                user:
                  type: string
                  description: 'The user of the server.'
                private_key_uuid:
                  type: string
                  description: 'The UUID of the private key.'
                is_build_server:
                  type: boolean
                  description: 'Is build server.'
                instant_validate:
                  type: boolean
                  description: 'Instant validate.'
                proxy_type:
                  type: string
                  enum: [traefik, caddy, none]
                  description: 'The proxy type.'
              type: object
      responses:
        '201':
          description: 'Server updated.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Server'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/servers/{uuid}/resources':
    get:
      tags:
        - Servers
      summary: Resources
      description: 'Get resources by server.'
      operationId: get-resources-by-server-uuid
      parameters:
        -
          name: uuid
          in: path
          description: "Server's UUID"
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Get resources by server'
          content:
            application/json:
              schema:
                type: array
                items:
                  properties: { id: { type: integer }, uuid: { type: string }, name: { type: string }, type: { type: string }, created_at: { type: string }, updated_at: { type: string }, status: { type: string } }
                  type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/servers/{uuid}/domains':
    get:
      tags:
        - Servers
      summary: Domains
      description: 'Get domains by server.'
      operationId: get-domains-by-server-uuid
      parameters:
        -
          name: uuid
          in: path
          description: "Server's UUID"
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Get domains by server'
          content:
            application/json:
              schema:
                type: array
                items:
                  properties: { ip: { type: string }, domains: { type: array, items: { type: string } } }
                  type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/servers/{uuid}/validate':
    get:
      tags:
        - Servers
      summary: Validate
      description: 'Validate server by UUID.'
      operationId: validate-server-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Server UUID'
          required: true
          schema:
            type: string
      responses:
        '201':
          description: 'Server validation started.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Validation started.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /services:
    get:
      tags:
        - Services
      summary: List
      description: 'List all services.'
      operationId: list-services
      responses:
        '200':
          description: 'Get all services'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Service'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - Services
      summary: 'Create service'
      description: 'Create a one-click / custom service'
      operationId: create-service
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - server_uuid
                - project_uuid
                - environment_name
                - environment_uuid
              properties:
                type:
                  description: 'The one-click service type'
                  type: string
                  enum: [activepieces, appsmith, appwrite, authentik, babybuddy, budge, changedetection, chatwoot, classicpress-with-mariadb, classicpress-with-mysql, classicpress-without-database, cloudflared, code-server, dashboard, directus, directus-with-postgresql, docker-registry, docuseal, docuseal-with-postgres, dokuwiki, duplicati, emby, embystat, fider, filebrowser, firefly, formbricks, ghost, gitea, gitea-with-mariadb, gitea-with-mysql, gitea-with-postgresql, glance, glances, glitchtip, grafana, grafana-with-postgresql, grocy, heimdall, homepage, jellyfin, kuzzle, listmonk, logto, mediawiki, meilisearch, metabase, metube, minio, moodle, n8n, n8n-with-postgresql, next-image-transformation, nextcloud, nocodb, odoo, openblocks, pairdrop, penpot, phpmyadmin, pocketbase, posthog, reactive-resume, rocketchat, shlink, slash, snapdrop, statusnook, stirling-pdf, supabase, syncthing, tolgee, trigger, trigger-with-external-database, twenty, umami, unleash-with-postgresql, unleash-without-database, uptime-kuma, vaultwarden, vikunja, weblate, whoogle, wordpress-with-mariadb, wordpress-with-mysql, wordpress-without-database]
                name:
                  type: string
                  maxLength: 255
                  description: 'Name of the service.'
                description:
                  type: string
                  nullable: true
                  description: 'Description of the service.'
                project_uuid:
                  type: string
                  description: 'Project UUID.'
                environment_name:
                  type: string
                  description: 'Environment name. You need to provide at least one of environment_name or environment_uuid.'
                environment_uuid:
                  type: string
                  description: 'Environment UUID. You need to provide at least one of environment_name or environment_uuid.'
                server_uuid:
                  type: string
                  description: 'Server UUID.'
                destination_uuid:
                  type: string
                  description: 'Destination UUID. Required if server has multiple destinations.'
                instant_deploy:
                  type: boolean
                  default: false
                  description: 'Start the service immediately after creation.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
              type: object
      responses:
        '201':
          description: 'Service created successfully.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, description: 'Service UUID.' }
                  domains: { type: array, items: { type: string }, description: 'Service domains.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/services/{uuid}':
    get:
      tags:
        - Services
      summary: Get
      description: 'Get service by UUID.'
      operationId: get-service-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Service UUID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Get a service by UUID.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Service'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    delete:
      tags:
        - Services
      summary: Delete
      description: 'Delete service by UUID.'
      operationId: delete-service-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'Service UUID'
          required: true
          schema:
            type: string
        -
          name: delete_configurations
          in: query
          description: 'Delete configurations.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: delete_volumes
          in: query
          description: 'Delete volumes.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: docker_cleanup
          in: query
          description: 'Run docker cleanup.'
          required: false
          schema:
            type: boolean
            default: true
        -
          name: delete_connected_networks
          in: query
          description: 'Delete connected networks.'
          required: false
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: 'Delete a service by UUID'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Service deletion request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Services
      summary: Update
      description: 'Update service by UUID.'
      operationId: update-service-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Service updated.'
        required: true
        content:
          application/json:
            schema:
              properties:
                name:
                  type: string
                  description: 'The service name.'
                description:
                  type: string
                  description: 'The service description.'
                project_uuid:
                  type: string
                  description: 'The project UUID.'
                environment_name:
                  type: string
                  description: 'The environment name.'
                environment_uuid:
                  type: string
                  description: 'The environment UUID.'
                server_uuid:
                  type: string
                  description: 'The server UUID.'
                destination_uuid:
                  type: string
                  description: 'The destination UUID.'
                instant_deploy:
                  type: boolean
                  description: 'The flag to indicate if the service should be deployed instantly.'
                connect_to_docker_network:
                  type: boolean
                  default: false
                  description: 'Connect the service to the predefined docker network.'
                docker_compose_raw:
                  type: string
                  description: 'The Docker Compose raw content.'
              type: object
      responses:
        '200':
          description: 'Service updated.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, description: 'Service UUID.' }
                  domains: { type: array, items: { type: string }, description: 'Service domains.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/services/{uuid}/envs':
    get:
      tags:
        - Services
      summary: 'List Envs'
      description: 'List all envs by service UUID.'
      operationId: list-envs-by-service-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'All environment variables by service UUID.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EnvironmentVariable'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    post:
      tags:
        - Services
      summary: 'Create Env'
      description: 'Create env by service UUID.'
      operationId: create-env-by-service-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Env created.'
        required: true
        content:
          application/json:
            schema:
              properties:
                key:
                  type: string
                  description: 'The key of the environment variable.'
                value:
                  type: string
                  description: 'The value of the environment variable.'
                is_preview:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is used in preview deployments.'
                is_literal:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is a literal, nothing espaced.'
                is_multiline:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is multiline.'
                is_shown_once:
                  type: boolean
                  description: "The flag to indicate if the environment variable's value is shown on the UI."
              type: object
      responses:
        '201':
          description: 'Environment variable created.'
          content:
            application/json:
              schema:
                properties:
                  uuid: { type: string, example: nc0k04gk8g0cgsk440g0koko }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
    patch:
      tags:
        - Services
      summary: 'Update Env'
      description: 'Update env by service UUID.'
      operationId: update-env-by-service-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Env updated.'
        required: true
        content:
          application/json:
            schema:
              required:
                - key
                - value
              properties:
                key:
                  type: string
                  description: 'The key of the environment variable.'
                value:
                  type: string
                  description: 'The value of the environment variable.'
                is_preview:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is used in preview deployments.'
                is_literal:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is a literal, nothing espaced.'
                is_multiline:
                  type: boolean
                  description: 'The flag to indicate if the environment variable is multiline.'
                is_shown_once:
                  type: boolean
                  description: "The flag to indicate if the environment variable's value is shown on the UI."
              type: object
      responses:
        '201':
          description: 'Environment variable updated.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment variable updated.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/services/{uuid}/envs/bulk':
    patch:
      tags:
        - Services
      summary: 'Update Envs (Bulk)'
      description: 'Update multiple envs by service UUID.'
      operationId: update-envs-by-service-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: 'Bulk envs updated.'
        required: true
        content:
          application/json:
            schema:
              required:
                - data
              properties:
                data:
                  type: array
                  items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_preview: { type: boolean, description: 'The flag to indicate if the environment variable is used in preview deployments.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: "The flag to indicate if the environment variable's value is shown on the UI." } }, type: object }
              type: object
      responses:
        '201':
          description: 'Environment variables updated.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment variables updated.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/services/{uuid}/envs/{env_uuid}':
    delete:
      tags:
        - Services
      summary: 'Delete Env'
      description: 'Delete env by UUID.'
      operationId: delete-env-by-service-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: env_uuid
          in: path
          description: 'UUID of the environment variable.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Environment variable deleted.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Environment variable deleted.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/services/{uuid}/start':
    get:
      tags:
        - Services
      summary: Start
      description: 'Start service. `Post` request is also accepted.'
      operationId: start-service-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Start service.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Service starting request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/services/{uuid}/stop':
    get:
      tags:
        - Services
      summary: Stop
      description: 'Stop service. `Post` request is also accepted.'
      operationId: stop-service-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Stop service.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Service stopping request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/services/{uuid}/restart':
    get:
      tags:
        - Services
      summary: Restart
      description: 'Restart service. `Post` request is also accepted.'
      operationId: restart-service-by-uuid
      parameters:
        -
          name: uuid
          in: path
          description: 'UUID of the service.'
          required: true
          schema:
            type: string
            format: uuid
        -
          name: latest
          in: query
          description: 'Pull latest images.'
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: 'Restart service.'
          content:
            application/json:
              schema:
                properties:
                  message: { type: string, example: 'Service restaring request queued.' }
                type: object
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /teams:
    get:
      tags:
        - Teams
      summary: List
      description: 'Get all teams.'
      operationId: list-teams
      responses:
        '200':
          description: 'List of teams.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Team'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  '/teams/{id}':
    get:
      tags:
        - Teams
      summary: Get
      description: 'Get team by TeamId.'
      operationId: get-team-by-id
      parameters:
        -
          name: id
          in: path
          description: 'Team ID'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'List of teams.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Team'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  '/teams/{id}/members':
    get:
      tags:
        - Teams
      summary: Members
      description: 'Get members by TeamId.'
      operationId: get-members-by-team-id
      parameters:
        -
          name: id
          in: path
          description: 'Team ID'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'List of members.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
        '404':
          $ref: '#/components/responses/404'
      security:
        -
          bearerAuth: []
  /teams/current:
    get:
      tags:
        - Teams
      summary: 'Authenticated Team'
      description: 'Get currently authenticated team.'
      operationId: get-current-team
      responses:
        '200':
          description: 'Current Team.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Team'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
  /teams/current/members:
    get:
      tags:
        - Teams
      summary: 'Authenticated Team Members'
      description: 'Get currently authenticated team members.'
      operationId: get-current-team-members
      responses:
        '200':
          description: 'Currently authenticated team members.'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/401'
        '400':
          $ref: '#/components/responses/400'
      security:
        -
          bearerAuth: []
components:
  schemas:
    Application:
      description: 'Application model'
      properties:
        id:
          type: integer
          description: 'The application identifier in the database.'
        description:
          type: string
          nullable: true
          description: 'The application description.'
        repository_project_id:
          type: integer
          nullable: true
          description: 'The repository project identifier.'
        uuid:
          type: string
          description: 'The application UUID.'
        name:
          type: string
          description: 'The application name.'
        fqdn:
          type: string
          nullable: true
          description: 'The application domains.'
        config_hash:
          type: string
          description: 'Configuration hash.'
        git_repository:
          type: string
          description: 'Git repository URL.'
        git_branch:
          type: string
          description: 'Git branch.'
        git_commit_sha:
          type: string
          description: 'Git commit SHA.'
        git_full_url:
          type: string
          nullable: true
          description: 'Git full URL.'
        docker_registry_image_name:
          type: string
          nullable: true
          description: 'Docker registry image name.'
        docker_registry_image_tag:
          type: string
          nullable: true
          description: 'Docker registry image tag.'
        build_pack:
          type: string
          description: 'Build pack.'
          enum:
            - nixpacks
            - static
            - dockerfile
            - dockercompose
        static_image:
          type: string
          description: 'Static image used when static site is deployed.'
        install_command:
          type: string
          description: 'Install command.'
        build_command:
          type: string
          description: 'Build command.'
        start_command:
          type: string
          description: 'Start command.'
        ports_exposes:
          type: string
          description: 'Ports exposes.'
        ports_mappings:
          type: string
          nullable: true
          description: 'Ports mappings.'
        custom_network_aliases:
          type: string
          nullable: true
          description: 'Network aliases for Docker container.'
        base_directory:
          type: string
          description: 'Base directory for all commands.'
        publish_directory:
          type: string
          description: 'Publish directory.'
        health_check_enabled:
          type: boolean
          description: 'Health check enabled.'
        health_check_path:
          type: string
          description: 'Health check path.'
        health_check_port:
          type: string
          nullable: true
          description: 'Health check port.'
        health_check_host:
          type: string
          nullable: true
          description: 'Health check host.'
        health_check_method:
          type: string
          description: 'Health check method.'
        health_check_return_code:
          type: integer
          description: 'Health check return code.'
        health_check_scheme:
          type: string
          description: 'Health check scheme.'
        health_check_response_text:
          type: string
          nullable: true
          description: 'Health check response text.'
        health_check_interval:
          type: integer
          description: 'Health check interval in seconds.'
        health_check_timeout:
          type: integer
          description: 'Health check timeout in seconds.'
        health_check_retries:
          type: integer
          description: 'Health check retries count.'
        health_check_start_period:
          type: integer
          description: 'Health check start period in seconds.'
        limits_memory:
          type: string
          description: 'Memory limit.'
        limits_memory_swap:
          type: string
          description: 'Memory swap limit.'
        limits_memory_swappiness:
          type: integer
          description: 'Memory swappiness.'
        limits_memory_reservation:
          type: string
          description: 'Memory reservation.'
        limits_cpus:
          type: string
          description: 'CPU limit.'
        limits_cpuset:
          type: string
          nullable: true
          description: 'CPU set.'
        limits_cpu_shares:
          type: integer
          description: 'CPU shares.'
        status:
          type: string
          description: 'Application status.'
        preview_url_template:
          type: string
          description: 'Preview URL template.'
        destination_type:
          type: string
          description: 'Destination type.'
        destination_id:
          type: integer
          description: 'Destination identifier.'
        source_id:
          type: integer
          nullable: true
          description: 'Source identifier.'
        private_key_id:
          type: integer
          nullable: true
          description: 'Private key identifier.'
        environment_id:
          type: integer
          description: 'Environment identifier.'
        dockerfile:
          type: string
          nullable: true
          description: 'Dockerfile content. Used for dockerfile build pack.'
        dockerfile_location:
          type: string
          description: 'Dockerfile location.'
        custom_labels:
          type: string
          nullable: true
          description: 'Custom labels.'
        dockerfile_target_build:
          type: string
          nullable: true
          description: 'Dockerfile target build.'
        manual_webhook_secret_github:
          type: string
          nullable: true
          description: 'Manual webhook secret for GitHub.'
        manual_webhook_secret_gitlab:
          type: string
          nullable: true
          description: 'Manual webhook secret for GitLab.'
        manual_webhook_secret_bitbucket:
          type: string
          nullable: true
          description: 'Manual webhook secret for Bitbucket.'
        manual_webhook_secret_gitea:
          type: string
          nullable: true
          description: 'Manual webhook secret for Gitea.'
        docker_compose_location:
          type: string
          description: 'Docker compose location.'
        docker_compose:
          type: string
          nullable: true
          description: 'Docker compose content. Used for docker compose build pack.'
        docker_compose_raw:
          type: string
          nullable: true
          description: 'Docker compose raw content.'
        docker_compose_domains:
          type: string
          nullable: true
          description: 'Docker compose domains.'
        docker_compose_custom_start_command:
          type: string
          nullable: true
          description: 'Docker compose custom start command.'
        docker_compose_custom_build_command:
          type: string
          nullable: true
          description: 'Docker compose custom build command.'
        swarm_replicas:
          type: integer
          nullable: true
          description: 'Swarm replicas. Only used for swarm deployments.'
        swarm_placement_constraints:
          type: string
          nullable: true
          description: 'Swarm placement constraints. Only used for swarm deployments.'
        custom_docker_run_options:
          type: string
          nullable: true
          description: 'Custom docker run options.'
        post_deployment_command:
          type: string
          nullable: true
          description: 'Post deployment command.'
        post_deployment_command_container:
          type: string
          nullable: true
          description: 'Post deployment command container.'
        pre_deployment_command:
          type: string
          nullable: true
          description: 'Pre deployment command.'
        pre_deployment_command_container:
          type: string
          nullable: true
          description: 'Pre deployment command container.'
        watch_paths:
          type: string
          nullable: true
          description: 'Watch paths.'
        custom_healthcheck_found:
          type: boolean
          description: 'Custom healthcheck found.'
        redirect:
          type: string
          nullable: true
          description: 'How to set redirect with Traefik / Caddy. www<->non-www.'
          enum:
            - www
            - non-www
            - both
        created_at:
          type: string
          format: date-time
          description: 'The date and time when the application was created.'
        updated_at:
          type: string
          format: date-time
          description: 'The date and time when the application was last updated.'
        deleted_at:
          type: string
          format: date-time
          nullable: true
          description: 'The date and time when the application was deleted.'
        compose_parsing_version:
          type: string
          description: 'How Coolify parse the compose file.'
        custom_nginx_configuration:
          type: string
          nullable: true
          description: 'Custom Nginx configuration base64 encoded.'
        is_http_basic_auth_enabled:
          type: boolean
          description: 'HTTP Basic Authentication enabled.'
        http_basic_auth_username:
          type: string
          nullable: true
          description: 'Username for HTTP Basic Authentication'
        http_basic_auth_password:
          type: string
          nullable: true
          description: 'Password for HTTP Basic Authentication'
      type: object
    ApplicationDeploymentQueue:
      description: 'Project model'
      properties:
        id:
          type: integer
        application_id:
          type: string
        deployment_uuid:
          type: string
        pull_request_id:
          type: integer
        force_rebuild:
          type: boolean
        commit:
          type: string
        status:
          type: string
        is_webhook:
          type: boolean
        is_api:
          type: boolean
        created_at:
          type: string
        updated_at:
          type: string
        logs:
          type: string
        current_process_id:
          type: string
        restart_only:
          type: boolean
        git_type:
          type: string
        server_id:
          type: integer
        application_name:
          type: string
        server_name:
          type: string
        deployment_url:
          type: string
        destination_id:
          type: string
        only_this_server:
          type: boolean
        rollback:
          type: boolean
        commit_message:
          type: string
      type: object
    Environment:
      description: 'Environment model'
      properties:
        id:
          type: integer
        name:
          type: string
        project_id:
          type: integer
        created_at:
          type: string
        updated_at:
          type: string
        description:
          type: string
      type: object
    EnvironmentVariable:
      description: 'Environment Variable model'
      properties:
        id:
          type: integer
        uuid:
          type: string
        resourceable_type:
          type: string
        resourceable_id:
          type: integer
        is_literal:
          type: boolean
        is_multiline:
          type: boolean
        is_preview:
          type: boolean
        is_runtime:
          type: boolean
        is_buildtime:
          type: boolean
        is_shared:
          type: boolean
        is_shown_once:
          type: boolean
        key:
          type: string
        value:
          type: string
        real_value:
          type: string
        version:
          type: string
        created_at:
          type: string
        updated_at:
          type: string
      type: object
    PrivateKey:
      description: 'Private Key model'
      properties:
        id:
          type: integer
        uuid:
          type: string
        name:
          type: string
        description:
          type: string
        private_key:
          type: string
          format: private-key
        public_key:
          type: string
          description: 'The public key of the private key.'
        fingerprint:
          type: string
          description: 'The fingerprint of the private key.'
        is_git_related:
          type: boolean
        team_id:
          type: integer
        created_at:
          type: string
        updated_at:
          type: string
      type: object
    Project:
      description: 'Project model'
      properties:
        id:
          type: integer
        uuid:
          type: string
        name:
          type: string
        description:
          type: string
        environments:
          description: 'The environments of the project.'
          type: array
          items:
            $ref: '#/components/schemas/Environment'
      type: object
    Server:
      description: 'Server model'
      properties:
        id:
          type: integer
          description: 'The server ID.'
        uuid:
          type: string
          description: 'The server UUID.'
        name:
          type: string
          description: 'The server name.'
        description:
          type: string
          description: 'The server description.'
        ip:
          type: string
          description: 'The IP address.'
        user:
          type: string
          description: 'The user.'
        port:
          type: integer
          description: 'The port number.'
        proxy:
          type: object
          description: 'The proxy configuration.'
        proxy_type:
          type: string
          enum:
            - traefik
            - caddy
            - none
          description: 'The proxy type.'
        high_disk_usage_notification_sent:
          type: boolean
          description: 'The flag to indicate if the high disk usage notification has been sent.'
        unreachable_notification_sent:
          type: boolean
          description: 'The flag to indicate if the unreachable notification has been sent.'
        unreachable_count:
          type: integer
          description: 'The unreachable count for your server.'
        validation_logs:
          type: string
          description: 'The validation logs.'
        log_drain_notification_sent:
          type: boolean
          description: 'The flag to indicate if the log drain notification has been sent.'
        swarm_cluster:
          type: string
          description: 'The swarm cluster configuration.'
        settings:
          $ref: '#/components/schemas/ServerSetting'
      type: object
    ServerSetting:
      description: 'Server Settings model'
      properties:
        id:
          type: integer
        concurrent_builds:
          type: integer
        dynamic_timeout:
          type: integer
        force_disabled:
          type: boolean
        force_server_cleanup:
          type: boolean
        is_build_server:
          type: boolean
        is_cloudflare_tunnel:
          type: boolean
        is_jump_server:
          type: boolean
        is_logdrain_axiom_enabled:
          type: boolean
        is_logdrain_custom_enabled:
          type: boolean
        is_logdrain_highlight_enabled:
          type: boolean
        is_logdrain_newrelic_enabled:
          type: boolean
        is_metrics_enabled:
          type: boolean
        is_reachable:
          type: boolean
        is_sentinel_enabled:
          type: boolean
        is_swarm_manager:
          type: boolean
        is_swarm_worker:
          type: boolean
        is_terminal_enabled:
          type: boolean
        is_usable:
          type: boolean
        logdrain_axiom_api_key:
          type: string
        logdrain_axiom_dataset_name:
          type: string
        logdrain_custom_config:
          type: string
        logdrain_custom_config_parser:
          type: string
        logdrain_highlight_project_id:
          type: string
        logdrain_newrelic_base_uri:
          type: string
        logdrain_newrelic_license_key:
          type: string
        sentinel_metrics_history_days:
          type: integer
        sentinel_metrics_refresh_rate_seconds:
          type: integer
        sentinel_token:
          type: string
        docker_cleanup_frequency:
          type: string
        docker_cleanup_threshold:
          type: integer
        server_id:
          type: integer
        wildcard_domain:
          type: string
        created_at:
          type: string
        updated_at:
          type: string
        delete_unused_volumes:
          type: boolean
          description: 'The flag to indicate if the unused volumes should be deleted.'
        delete_unused_networks:
          type: boolean
          description: 'The flag to indicate if the unused networks should be deleted.'
      type: object
    Service:
      description: 'Service model'
      properties:
        id:
          type: integer
          description: 'The unique identifier of the service. Only used for database identification.'
        uuid:
          type: string
          description: 'The unique identifier of the service.'
        name:
          type: string
          description: 'The name of the service.'
        environment_id:
          type: integer
          description: 'The unique identifier of the environment where the service is attached to.'
        server_id:
          type: integer
          description: 'The unique identifier of the server where the service is running.'
        description:
          type: string
          description: 'The description of the service.'
        docker_compose_raw:
          type: string
          description: 'The raw docker-compose.yml file of the service.'
        docker_compose:
          type: string
          description: 'The docker-compose.yml file that is parsed and modified by Coolify.'
        destination_type:
          type: string
          description: 'Destination type.'
        destination_id:
          type: integer
          description: 'The unique identifier of the destination where the service is running.'
        connect_to_docker_network:
          type: boolean
          description: 'The flag to connect the service to the predefined Docker network.'
        is_container_label_escape_enabled:
          type: boolean
          description: 'The flag to enable the container label escape.'
        is_container_label_readonly_enabled:
          type: boolean
          description: 'The flag to enable the container label readonly.'
        config_hash:
          type: string
          description: 'The hash of the service configuration.'
        service_type:
          type: string
          description: 'The type of the service.'
        created_at:
          type: string
          description: 'The date and time when the service was created.'
        updated_at:
          type: string
          description: 'The date and time when the service was last updated.'
        deleted_at:
          type: string
          description: 'The date and time when the service was deleted.'
      type: object
    Team:
      description: 'Team model'
      properties:
        id:
          type: integer
          description: 'The unique identifier of the team.'
        name:
          type: string
          description: 'The name of the team.'
        description:
          type: string
          description: 'The description of the team.'
        personal_team:
          type: boolean
          description: 'Whether the team is personal or not.'
        created_at:
          type: string
          description: 'The date and time the team was created.'
        updated_at:
          type: string
          description: 'The date and time the team was last updated.'
        show_boarding:
          type: boolean
          description: 'Whether to show the boarding screen or not.'
        custom_server_limit:
          type: string
          description: 'The custom server limit.'
        members:
          description: 'The members of the team.'
          type: array
          items:
            $ref: '#/components/schemas/User'
      type: object
    User:
      description: 'User model'
      properties:
        id:
          type: integer
          description: 'The user identifier in the database.'
        name:
          type: string
          description: 'The user name.'
        email:
          type: string
          description: 'The user email.'
        email_verified_at:
          type: string
          description: 'The date when the user email was verified.'
        created_at:
          type: string
          description: 'The date when the user was created.'
        updated_at:
          type: string
          description: 'The date when the user was updated.'
        two_factor_confirmed_at:
          type: string
          description: 'The date when the user two factor was confirmed.'
        force_password_reset:
          type: boolean
          description: 'The flag to force the user to reset the password.'
        marketing_emails:
          type: boolean
          description: 'The flag to receive marketing emails.'
      type: object
  responses:
    '400':
      description: 'Invalid token.'
      content:
        application/json:
          schema:
            properties:
              message:
                type: string
                example: 'Invalid token.'
            type: object
    '401':
      description: Unauthenticated.
      content:
        application/json:
          schema:
            properties:
              message:
                type: string
                example: Unauthenticated.
            type: object
    '404':
      description: 'Resource not found.'
      content:
        application/json:
          schema:
            properties:
              message:
                type: string
                example: 'Resource not found.'
            type: object
  securitySchemes:
    bearerAuth:
      type: http
      description: 'Go to `Keys & Tokens` / `API tokens` and create a new token. Use the token as the bearer token.'
      scheme: bearer
tags:
  -
    name: Applications
    description: Applications
  -
    name: Databases
    description: Databases
  -
    name: Deployments
    description: Deployments
  -
    name: Projects
    description: Projects
  -
    name: Resources
    description: Resources
  -
    name: 'Private Keys'
    description: 'Private Keys'
  -
    name: Servers
    description: Servers
  -
    name: Services
    description: Services
  -
    name: Teams
    description: Teams
