mirror of
https://github.com/coollabsio/coolify.git
synced 2025-12-28 05:34:50 +00:00
- Introduced a new schema for coolify.json to validate application configurations. - Implemented loading and parsing logic for coolify.json in the application. - Added UI components for importing coolify.json configurations in various project creation flows. - Enhanced logging for coolify.json processing to aid in debugging. - Created unit tests to validate coolify.json parsing and magic variable resolution. - Updated existing forms to include options for importing coolify.json settings.
7118 lines
239 KiB
YAML
7118 lines
239 KiB
YAML
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.'
|
|
autogenerate_domain:
|
|
type: boolean
|
|
default: true
|
|
description: "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
|
|
use_coolify_json:
|
|
type: boolean
|
|
description: 'Check repository for coolify.json and apply configuration if found. Default is true.'
|
|
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.'
|
|
autogenerate_domain:
|
|
type: boolean
|
|
default: true
|
|
description: "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
|
|
use_coolify_json:
|
|
type: boolean
|
|
description: 'Check repository for coolify.json and apply configuration if found. Default is true.'
|
|
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.'
|
|
autogenerate_domain:
|
|
type: boolean
|
|
default: true
|
|
description: "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
|
|
use_coolify_json:
|
|
type: boolean
|
|
description: 'Check repository for coolify.json and apply configuration if found. Default is true.'
|
|
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.'
|
|
autogenerate_domain:
|
|
type: boolean
|
|
default: true
|
|
description: "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
|
|
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.'
|
|
autogenerate_domain:
|
|
type: boolean
|
|
default: true
|
|
description: "If true and domains is empty, auto-generate a domain using the server's wildcard domain or sslip.io fallback. Default: true."
|
|
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: []
|
|
/cloud-tokens:
|
|
get:
|
|
tags:
|
|
- 'Cloud Tokens'
|
|
summary: 'List Cloud Provider Tokens'
|
|
description: 'List all cloud provider tokens for the authenticated team.'
|
|
operationId: list-cloud-tokens
|
|
responses:
|
|
'200':
|
|
description: 'Get all cloud provider tokens.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
properties: { uuid: { type: string }, name: { type: string }, provider: { type: string, enum: [hetzner, digitalocean] }, team_id: { type: integer }, servers_count: { type: integer }, created_at: { type: string }, updated_at: { type: string } }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
post:
|
|
tags:
|
|
- 'Cloud Tokens'
|
|
summary: 'Create Cloud Provider Token'
|
|
description: 'Create a new cloud provider token. The token will be validated before being stored.'
|
|
operationId: create-cloud-token
|
|
requestBody:
|
|
description: 'Cloud provider token details'
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- provider
|
|
- token
|
|
- name
|
|
properties:
|
|
provider:
|
|
type: string
|
|
enum: [hetzner, digitalocean]
|
|
example: hetzner
|
|
description: 'The cloud provider.'
|
|
token:
|
|
type: string
|
|
example: your-api-token-here
|
|
description: 'The API token for the cloud provider.'
|
|
name:
|
|
type: string
|
|
example: 'My Hetzner Token'
|
|
description: 'A friendly name for the token.'
|
|
type: object
|
|
responses:
|
|
'201':
|
|
description: 'Cloud provider token created.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
uuid: { type: string, example: og888os, description: 'The UUID of the token.' }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/cloud-tokens/{uuid}':
|
|
get:
|
|
tags:
|
|
- 'Cloud Tokens'
|
|
summary: 'Get Cloud Provider Token'
|
|
description: 'Get cloud provider token by UUID.'
|
|
operationId: get-cloud-token-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'Token UUID'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'Get cloud provider token by UUID'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
uuid: { type: string }
|
|
name: { type: string }
|
|
provider: { type: string }
|
|
team_id: { type: integer }
|
|
servers_count: { type: integer }
|
|
created_at: { type: string }
|
|
updated_at: { type: string }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
delete:
|
|
tags:
|
|
- 'Cloud Tokens'
|
|
summary: 'Delete Cloud Provider Token'
|
|
description: 'Delete cloud provider token by UUID. Cannot delete if token is used by any servers.'
|
|
operationId: delete-cloud-token-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the cloud provider token.'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: 'Cloud provider token deleted.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Cloud provider token deleted.' }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
patch:
|
|
tags:
|
|
- 'Cloud Tokens'
|
|
summary: 'Update Cloud Provider Token'
|
|
description: 'Update cloud provider token name.'
|
|
operationId: update-cloud-token-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'Token UUID'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
description: 'Cloud provider token updated.'
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: 'The friendly name for the token.'
|
|
type: object
|
|
responses:
|
|
'200':
|
|
description: 'Cloud provider token updated.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
uuid: { type: string }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/cloud-tokens/{uuid}/validate':
|
|
post:
|
|
tags:
|
|
- 'Cloud Tokens'
|
|
summary: 'Validate Cloud Provider Token'
|
|
description: 'Validate a cloud provider token against the provider API.'
|
|
operationId: validate-cloud-token-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'Token UUID'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'Token validation result.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
valid: { type: boolean, example: true }
|
|
message: { type: string, example: 'Token is valid.' }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'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}/backups':
|
|
get:
|
|
tags:
|
|
- Databases
|
|
summary: Get
|
|
description: 'Get backups details by database UUID.'
|
|
operationId: get-database-backups-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the database.'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: 'Get all backups for a database'
|
|
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: []
|
|
post:
|
|
tags:
|
|
- Databases
|
|
summary: 'Create Backup'
|
|
description: 'Create a new scheduled backup configuration for a database'
|
|
operationId: create-database-backup
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the database.'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
requestBody:
|
|
description: 'Backup configuration data'
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- frequency
|
|
properties:
|
|
frequency:
|
|
type: string
|
|
description: 'Backup frequency (cron expression or: every_minute, hourly, daily, weekly, monthly, yearly)'
|
|
enabled:
|
|
type: boolean
|
|
description: 'Whether the backup is enabled'
|
|
default: true
|
|
save_s3:
|
|
type: boolean
|
|
description: 'Whether to save backups to S3'
|
|
default: false
|
|
s3_storage_uuid:
|
|
type: string
|
|
description: 'S3 storage UUID (required if save_s3 is true)'
|
|
databases_to_backup:
|
|
type: string
|
|
description: 'Comma separated list of databases to backup'
|
|
dump_all:
|
|
type: boolean
|
|
description: 'Whether to dump all databases'
|
|
default: false
|
|
backup_now:
|
|
type: boolean
|
|
description: 'Whether to trigger backup immediately after creation'
|
|
database_backup_retention_amount_locally:
|
|
type: integer
|
|
description: 'Number of backups to retain locally'
|
|
database_backup_retention_days_locally:
|
|
type: integer
|
|
description: 'Number of days to retain backups locally'
|
|
database_backup_retention_max_storage_locally:
|
|
type: integer
|
|
description: 'Max storage (MB) for local backups'
|
|
database_backup_retention_amount_s3:
|
|
type: integer
|
|
description: 'Number of backups to retain in S3'
|
|
database_backup_retention_days_s3:
|
|
type: integer
|
|
description: 'Number of days to retain backups in S3'
|
|
database_backup_retention_max_storage_s3:
|
|
type: integer
|
|
description: 'Max storage (MB) for S3 backups'
|
|
type: object
|
|
responses:
|
|
'201':
|
|
description: 'Backup configuration created successfully'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
uuid: { type: string, format: uuid, example: 550e8400-e29b-41d4-a716-446655440000 }
|
|
message: { type: string, example: 'Backup configuration created successfully.' }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/databases/{uuid}/backups/{scheduled_backup_uuid}':
|
|
delete:
|
|
tags:
|
|
- Databases
|
|
summary: 'Delete backup configuration'
|
|
description: 'Deletes a backup configuration and all its executions.'
|
|
operationId: delete-backup-configuration-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the database'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
-
|
|
name: scheduled_backup_uuid
|
|
in: path
|
|
description: 'UUID of the backup configuration to delete'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
-
|
|
name: delete_s3
|
|
in: query
|
|
description: 'Whether to delete all backup files from S3'
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
default: false
|
|
responses:
|
|
'200':
|
|
description: 'Backup configuration deleted.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Backup configuration and all executions deleted.' }
|
|
type: object
|
|
'404':
|
|
description: 'Backup configuration not found.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Backup configuration not found.' }
|
|
type: object
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
patch:
|
|
tags:
|
|
- Databases
|
|
summary: Update
|
|
description: 'Update a specific backup configuration for a given database, identified by its UUID and the backup ID'
|
|
operationId: update-database-backup
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the database.'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
-
|
|
name: scheduled_backup_uuid
|
|
in: path
|
|
description: 'UUID of the backup configuration.'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
requestBody:
|
|
description: 'Database backup configuration data'
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
save_s3:
|
|
type: boolean
|
|
description: 'Whether data is saved in s3 or not'
|
|
s3_storage_uuid:
|
|
type: string
|
|
description: 'S3 storage UUID'
|
|
backup_now:
|
|
type: boolean
|
|
description: 'Whether to take a backup now or not'
|
|
enabled:
|
|
type: boolean
|
|
description: 'Whether the backup is enabled or not'
|
|
databases_to_backup:
|
|
type: string
|
|
description: 'Comma separated list of databases to backup'
|
|
dump_all:
|
|
type: boolean
|
|
description: 'Whether all databases are dumped or not'
|
|
frequency:
|
|
type: string
|
|
description: 'Frequency of the backup'
|
|
database_backup_retention_amount_locally:
|
|
type: integer
|
|
description: 'Retention amount of the backup locally'
|
|
database_backup_retention_days_locally:
|
|
type: integer
|
|
description: 'Retention days of the backup locally'
|
|
database_backup_retention_max_storage_locally:
|
|
type: integer
|
|
description: 'Max storage of the backup locally'
|
|
database_backup_retention_amount_s3:
|
|
type: integer
|
|
description: 'Retention amount of the backup in s3'
|
|
database_backup_retention_days_s3:
|
|
type: integer
|
|
description: 'Retention days of the backup in s3'
|
|
database_backup_retention_max_storage_s3:
|
|
type: integer
|
|
description: 'Max storage of the backup in S3'
|
|
type: object
|
|
responses:
|
|
'200':
|
|
description: 'Database backup configuration updated'
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/databases/{uuid}/backups/{scheduled_backup_uuid}/executions/{execution_uuid}':
|
|
delete:
|
|
tags:
|
|
- Databases
|
|
summary: 'Delete backup execution'
|
|
description: 'Deletes a specific backup execution.'
|
|
operationId: delete-backup-execution-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the database'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
-
|
|
name: scheduled_backup_uuid
|
|
in: path
|
|
description: 'UUID of the backup configuration'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
-
|
|
name: execution_uuid
|
|
in: path
|
|
description: 'UUID of the backup execution to delete'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
-
|
|
name: delete_s3
|
|
in: query
|
|
description: 'Whether to delete the backup from S3'
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
default: false
|
|
responses:
|
|
'200':
|
|
description: 'Backup execution deleted.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Backup execution deleted.' }
|
|
type: object
|
|
'404':
|
|
description: 'Backup execution not found.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Backup execution not found.' }
|
|
type: object
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/databases/{uuid}/backups/{scheduled_backup_uuid}/executions':
|
|
get:
|
|
tags:
|
|
- Databases
|
|
summary: 'List backup executions'
|
|
description: 'Get all executions for a specific backup configuration.'
|
|
operationId: list-backup-executions
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'UUID of the database'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
-
|
|
name: scheduled_backup_uuid
|
|
in: path
|
|
description: 'UUID of the backup configuration'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
'200':
|
|
description: 'List of backup executions'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
executions: { type: array, items: { properties: { uuid: { type: string }, filename: { type: string }, size: { type: integer }, created_at: { type: string }, message: { type: string }, status: { type: string } }, type: object } }
|
|
type: object
|
|
'404':
|
|
description: 'Backup configuration not found.'
|
|
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: []
|
|
'/deployments/{uuid}/cancel':
|
|
post:
|
|
tags:
|
|
- Deployments
|
|
summary: Cancel
|
|
description: 'Cancel a deployment by UUID.'
|
|
operationId: cancel-deployment-by-uuid
|
|
parameters:
|
|
-
|
|
name: uuid
|
|
in: path
|
|
description: 'Deployment UUID'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'Deployment cancelled successfully.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Deployment cancelled successfully.' }
|
|
deployment_uuid: { type: string, example: cm37r6cqj000008jm0veg5tkm }
|
|
status: { type: string, example: cancelled-by-user }
|
|
type: object
|
|
'400':
|
|
description: 'Deployment cannot be cancelled (already finished/failed/cancelled).'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'Deployment cannot be cancelled. Current status: finished' }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'403':
|
|
description: "User doesn't have permission to cancel this deployment."
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'You do not have permission to cancel this deployment.' }
|
|
type: object
|
|
'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: []
|
|
/github-apps:
|
|
get:
|
|
tags:
|
|
- 'GitHub Apps'
|
|
summary: List
|
|
description: 'List all GitHub apps.'
|
|
operationId: list-github-apps
|
|
responses:
|
|
'200':
|
|
description: 'List of GitHub apps.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
properties: { id: { type: integer }, uuid: { type: string }, name: { type: string }, organization: { type: string, nullable: true }, api_url: { type: string }, html_url: { type: string }, custom_user: { type: string }, custom_port: { type: integer }, app_id: { type: integer }, installation_id: { type: integer }, client_id: { type: string }, private_key_id: { type: integer }, is_system_wide: { type: boolean }, is_public: { type: boolean }, team_id: { type: integer }, type: { type: string } }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
post:
|
|
tags:
|
|
- 'GitHub Apps'
|
|
summary: 'Create GitHub App'
|
|
description: 'Create a new GitHub app.'
|
|
operationId: create-github-app
|
|
requestBody:
|
|
description: 'GitHub app creation payload.'
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- name
|
|
- api_url
|
|
- html_url
|
|
- app_id
|
|
- installation_id
|
|
- client_id
|
|
- client_secret
|
|
- private_key_uuid
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: 'Name of the GitHub app.'
|
|
organization:
|
|
type: string
|
|
nullable: true
|
|
description: 'Organization to associate the app with.'
|
|
api_url:
|
|
type: string
|
|
description: 'API URL for the GitHub app (e.g., https://api.github.com).'
|
|
html_url:
|
|
type: string
|
|
description: 'HTML URL for the GitHub app (e.g., https://github.com).'
|
|
custom_user:
|
|
type: string
|
|
description: 'Custom user for SSH access (default: git).'
|
|
custom_port:
|
|
type: integer
|
|
description: 'Custom port for SSH access (default: 22).'
|
|
app_id:
|
|
type: integer
|
|
description: 'GitHub App ID from GitHub.'
|
|
installation_id:
|
|
type: integer
|
|
description: 'GitHub Installation ID.'
|
|
client_id:
|
|
type: string
|
|
description: 'GitHub OAuth App Client ID.'
|
|
client_secret:
|
|
type: string
|
|
description: 'GitHub OAuth App Client Secret.'
|
|
webhook_secret:
|
|
type: string
|
|
description: 'Webhook secret for GitHub webhooks.'
|
|
private_key_uuid:
|
|
type: string
|
|
description: 'UUID of an existing private key for GitHub App authentication.'
|
|
is_system_wide:
|
|
type: boolean
|
|
description: 'Is this app system-wide (cloud only).'
|
|
type: object
|
|
responses:
|
|
'201':
|
|
description: 'GitHub app created successfully.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
id: { type: integer }
|
|
uuid: { type: string }
|
|
name: { type: string }
|
|
organization: { type: string, nullable: true }
|
|
api_url: { type: string }
|
|
html_url: { type: string }
|
|
custom_user: { type: string }
|
|
custom_port: { type: integer }
|
|
app_id: { type: integer }
|
|
installation_id: { type: integer }
|
|
client_id: { type: string }
|
|
private_key_id: { type: integer }
|
|
is_system_wide: { type: boolean }
|
|
team_id: { type: integer }
|
|
type: object
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/github-apps/{github_app_id}/repositories':
|
|
get:
|
|
tags:
|
|
- 'GitHub Apps'
|
|
summary: 'Load Repositories for a GitHub App'
|
|
description: 'Fetch repositories from GitHub for a given GitHub app.'
|
|
operationId: load-repositories
|
|
parameters:
|
|
-
|
|
name: github_app_id
|
|
in: path
|
|
description: 'GitHub App ID'
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: 'Repositories loaded successfully.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
repositories: { type: array, items: { type: object } }
|
|
type: object
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/github-apps/{github_app_id}/repositories/{owner}/{repo}/branches':
|
|
get:
|
|
tags:
|
|
- 'GitHub Apps'
|
|
summary: 'Load Branches for a GitHub Repository'
|
|
description: 'Fetch branches from GitHub for a given repository.'
|
|
operationId: load-branches
|
|
parameters:
|
|
-
|
|
name: github_app_id
|
|
in: path
|
|
description: 'GitHub App ID'
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
-
|
|
name: owner
|
|
in: path
|
|
description: 'Repository owner'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
-
|
|
name: repo
|
|
in: path
|
|
description: 'Repository name'
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'Branches loaded successfully.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
branches: { type: array, items: { type: object } }
|
|
type: object
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
'/github-apps/{github_app_id}':
|
|
delete:
|
|
tags:
|
|
- 'GitHub Apps'
|
|
summary: 'Delete GitHub App'
|
|
description: "Delete a GitHub app if it's not being used by any applications."
|
|
operationId: deleteGithubApp
|
|
parameters:
|
|
-
|
|
name: github_app_id
|
|
in: path
|
|
description: 'GitHub App ID'
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: 'GitHub app deleted successfully'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'GitHub app deleted successfully' }
|
|
type: object
|
|
'401':
|
|
description: Unauthorized
|
|
'404':
|
|
description: 'GitHub app not found'
|
|
'409':
|
|
description: 'Conflict - GitHub app is in use'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'This GitHub app is being used by 5 application(s). Please delete all applications first.' }
|
|
type: object
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
patch:
|
|
tags:
|
|
- 'GitHub Apps'
|
|
summary: 'Update GitHub App'
|
|
description: 'Update an existing GitHub app.'
|
|
operationId: updateGithubApp
|
|
parameters:
|
|
-
|
|
name: github_app_id
|
|
in: path
|
|
description: 'GitHub App ID'
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: 'GitHub App name'
|
|
organization:
|
|
type: string
|
|
nullable: true
|
|
description: 'GitHub organization'
|
|
api_url:
|
|
type: string
|
|
description: 'GitHub API URL'
|
|
html_url:
|
|
type: string
|
|
description: 'GitHub HTML URL'
|
|
custom_user:
|
|
type: string
|
|
description: 'Custom user for SSH'
|
|
custom_port:
|
|
type: integer
|
|
description: 'Custom port for SSH'
|
|
app_id:
|
|
type: integer
|
|
description: 'GitHub App ID'
|
|
installation_id:
|
|
type: integer
|
|
description: 'GitHub Installation ID'
|
|
client_id:
|
|
type: string
|
|
description: 'GitHub Client ID'
|
|
client_secret:
|
|
type: string
|
|
description: 'GitHub Client Secret'
|
|
webhook_secret:
|
|
type: string
|
|
description: 'GitHub Webhook Secret'
|
|
private_key_uuid:
|
|
type: string
|
|
description: 'Private key UUID'
|
|
is_system_wide:
|
|
type: boolean
|
|
description: 'Is system wide (non-cloud instances only)'
|
|
type: object
|
|
responses:
|
|
'200':
|
|
description: 'GitHub app updated successfully'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message: { type: string, example: 'GitHub app updated successfully' }
|
|
data: { type: object, description: 'Updated GitHub app data' }
|
|
type: object
|
|
'401':
|
|
description: Unauthorized
|
|
'404':
|
|
description: 'GitHub app not found'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
/hetzner/locations:
|
|
get:
|
|
tags:
|
|
- Hetzner
|
|
summary: 'Get Hetzner Locations'
|
|
description: 'Get all available Hetzner datacenter locations.'
|
|
operationId: get-hetzner-locations
|
|
parameters:
|
|
-
|
|
name: cloud_provider_token_uuid
|
|
in: query
|
|
description: 'Cloud provider token UUID. Required if cloud_provider_token_id is not provided.'
|
|
required: false
|
|
schema:
|
|
type: string
|
|
-
|
|
name: cloud_provider_token_id
|
|
in: query
|
|
description: 'Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.'
|
|
required: false
|
|
deprecated: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'List of Hetzner locations.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
properties: { id: { type: integer }, name: { type: string }, description: { type: string }, country: { type: string }, city: { type: string }, latitude: { type: number }, longitude: { type: number } }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
/hetzner/server-types:
|
|
get:
|
|
tags:
|
|
- Hetzner
|
|
summary: 'Get Hetzner Server Types'
|
|
description: 'Get all available Hetzner server types (instance sizes).'
|
|
operationId: get-hetzner-server-types
|
|
parameters:
|
|
-
|
|
name: cloud_provider_token_uuid
|
|
in: query
|
|
description: 'Cloud provider token UUID. Required if cloud_provider_token_id is not provided.'
|
|
required: false
|
|
schema:
|
|
type: string
|
|
-
|
|
name: cloud_provider_token_id
|
|
in: query
|
|
description: 'Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.'
|
|
required: false
|
|
deprecated: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'List of Hetzner server types.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
properties: { id: { type: integer }, name: { type: string }, description: { type: string }, cores: { type: integer }, memory: { type: number }, disk: { type: integer }, prices: { type: array, items: { type: object, properties: { location: { type: string, description: 'Datacenter location name' }, price_hourly: { type: object, properties: { net: { type: string }, gross: { type: string } } }, price_monthly: { type: object, properties: { net: { type: string }, gross: { type: string } } } } } } }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
/hetzner/images:
|
|
get:
|
|
tags:
|
|
- Hetzner
|
|
summary: 'Get Hetzner Images'
|
|
description: 'Get all available Hetzner system images (operating systems).'
|
|
operationId: get-hetzner-images
|
|
parameters:
|
|
-
|
|
name: cloud_provider_token_uuid
|
|
in: query
|
|
description: 'Cloud provider token UUID. Required if cloud_provider_token_id is not provided.'
|
|
required: false
|
|
schema:
|
|
type: string
|
|
-
|
|
name: cloud_provider_token_id
|
|
in: query
|
|
description: 'Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.'
|
|
required: false
|
|
deprecated: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'List of Hetzner images.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
properties: { id: { type: integer }, name: { type: string }, description: { type: string }, type: { type: string }, os_flavor: { type: string }, os_version: { type: string }, architecture: { type: string } }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
/hetzner/ssh-keys:
|
|
get:
|
|
tags:
|
|
- Hetzner
|
|
summary: 'Get Hetzner SSH Keys'
|
|
description: 'Get all SSH keys stored in the Hetzner account.'
|
|
operationId: get-hetzner-ssh-keys
|
|
parameters:
|
|
-
|
|
name: cloud_provider_token_uuid
|
|
in: query
|
|
description: 'Cloud provider token UUID. Required if cloud_provider_token_id is not provided.'
|
|
required: false
|
|
schema:
|
|
type: string
|
|
-
|
|
name: cloud_provider_token_id
|
|
in: query
|
|
description: 'Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.'
|
|
required: false
|
|
deprecated: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: 'List of Hetzner SSH keys.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
properties: { id: { type: integer }, name: { type: string }, fingerprint: { type: string }, public_key: { type: string } }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
/servers/hetzner:
|
|
post:
|
|
tags:
|
|
- Hetzner
|
|
summary: 'Create Hetzner Server'
|
|
description: 'Create a new server on Hetzner and register it in Coolify.'
|
|
operationId: create-hetzner-server
|
|
requestBody:
|
|
description: 'Hetzner server creation parameters'
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- location
|
|
- server_type
|
|
- image
|
|
- private_key_uuid
|
|
properties:
|
|
cloud_provider_token_uuid:
|
|
type: string
|
|
example: abc123
|
|
description: 'Cloud provider token UUID. Required if cloud_provider_token_id is not provided.'
|
|
cloud_provider_token_id:
|
|
type: string
|
|
example: abc123
|
|
description: 'Deprecated: Use cloud_provider_token_uuid instead. Cloud provider token UUID.'
|
|
deprecated: true
|
|
location:
|
|
type: string
|
|
example: nbg1
|
|
description: 'Hetzner location name'
|
|
server_type:
|
|
type: string
|
|
example: cx11
|
|
description: 'Hetzner server type name'
|
|
image:
|
|
type: integer
|
|
example: 15512617
|
|
description: 'Hetzner image ID'
|
|
name:
|
|
type: string
|
|
example: my-server
|
|
description: 'Server name (auto-generated if not provided)'
|
|
private_key_uuid:
|
|
type: string
|
|
example: xyz789
|
|
description: 'Private key UUID'
|
|
enable_ipv4:
|
|
type: boolean
|
|
example: true
|
|
description: 'Enable IPv4 (default: true)'
|
|
enable_ipv6:
|
|
type: boolean
|
|
example: true
|
|
description: 'Enable IPv6 (default: true)'
|
|
hetzner_ssh_key_ids:
|
|
type: array
|
|
items: { type: integer }
|
|
description: 'Additional Hetzner SSH key IDs'
|
|
cloud_init_script:
|
|
type: string
|
|
description: 'Cloud-init YAML script (optional)'
|
|
instant_validate:
|
|
type: boolean
|
|
example: false
|
|
description: 'Validate server immediately after creation'
|
|
type: object
|
|
responses:
|
|
'201':
|
|
description: 'Hetzner server created.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
uuid: { type: string, example: og888os, description: 'The UUID of the server.' }
|
|
hetzner_server_id: { type: integer, description: 'The Hetzner server ID.' }
|
|
ip: { type: string, description: 'The server IP address.' }
|
|
type: object
|
|
'401':
|
|
$ref: '#/components/responses/401'
|
|
'400':
|
|
$ref: '#/components/responses/400'
|
|
'404':
|
|
$ref: '#/components/responses/404'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
'429':
|
|
$ref: '#/components/responses/429'
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
/version:
|
|
get:
|
|
summary: Version
|
|
description: 'Get Coolify version.'
|
|
operationId: version
|
|
responses:
|
|
'200':
|
|
description: 'Returns the version of the application'
|
|
content:
|
|
text/html:
|
|
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:
|
|
text/html:
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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.'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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.'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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.'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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'
|
|
'422':
|
|
$ref: '#/components/responses/422'
|
|
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
|
|
deployment_queue_limit:
|
|
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
|
|
'422':
|
|
description: 'Validation error.'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message:
|
|
type: string
|
|
example: 'Validation error.'
|
|
errors:
|
|
type: object
|
|
example:
|
|
name: ['The name field is required.']
|
|
api_url: ['The api url field is required.', 'The api url format is invalid.']
|
|
additionalProperties:
|
|
type: array
|
|
items: { type: string }
|
|
type: object
|
|
'429':
|
|
description: 'Rate limit exceeded.'
|
|
headers:
|
|
Retry-After:
|
|
description: 'Number of seconds to wait before retrying.'
|
|
schema:
|
|
type: integer
|
|
example: 60
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
message:
|
|
type: string
|
|
example: 'Rate limit exceeded. Please try again later.'
|
|
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: 'Cloud Tokens'
|
|
description: 'Cloud Tokens'
|
|
-
|
|
name: Databases
|
|
description: Databases
|
|
-
|
|
name: Deployments
|
|
description: Deployments
|
|
-
|
|
name: 'GitHub Apps'
|
|
description: 'GitHub Apps'
|
|
-
|
|
name: Hetzner
|
|
description: Hetzner
|
|
-
|
|
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
|