coolify/openapi.json
peaklabs-dev 0628268875
feat(api): improve service urls update
- add force_domain_override functionality and docs
- delete service on creation if there is URL conflicts as otherwise we will have stale services (we need to create the service because we need to parse it and more)
2026-01-13 19:25:58 +01:00

11246 lines
No EOL
512 KiB
JSON

{
"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",
"parameters": [
{
"name": "tag",
"in": "query",
"description": "Filter applications by tag name.",
"required": false,
"schema": {
"type": "string"
}
}
],
"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_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": "Array of URLs to be applied to containers of a dockercompose application.",
"items": {
"properties": {
"name": {
"type": "string",
"description": "The service name as defined in docker-compose."
},
"domain": {
"type": "string",
"description": "Comma-separated list of URLs (e.g. \"http:\/\/app.coolify.io,https:\/\/app2.coolify.io\")"
}
},
"type": "object"
}
},
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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_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": "Array of URLs to be applied to containers of a dockercompose application.",
"items": {
"properties": {
"name": {
"type": "string",
"description": "The service name as defined in docker-compose."
},
"domain": {
"type": "string",
"description": "Comma-separated list of URLs (e.g. \"http:\/\/app.coolify.io,https:\/\/app2.coolify.io\")"
}
},
"type": "object"
}
},
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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_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": "Array of URLs to be applied to containers of a dockercompose application.",
"items": {
"properties": {
"name": {
"type": "string",
"description": "The service name as defined in docker-compose."
},
"domain": {
"type": "string",
"description": "Comma-separated list of URLs (e.g. \"http:\/\/app.coolify.io,https:\/\/app2.coolify.io\")"
}
},
"type": "object"
}
},
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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 without git)",
"description": "Create new application based on a simple Dockerfile (without git).",
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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 without git)",
"description": "Create new application based on a prebuilt docker image (without git).",
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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) (Deprecated)",
"description": "Create new application based on a docker-compose file (without git).",
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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"
}
}
}
}
},
"deprecated": true,
"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"
}
}
],
"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"
}
},
{
"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"
}
}
],
"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_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": "Array of URLs to be applied to containers of a dockercompose application.",
"items": {
"properties": {
"name": {
"type": "string",
"description": "The service name as defined in docker-compose."
},
"domain": {
"type": "string",
"description": "Comma-separated list of URLs (e.g. \"http:\/\/app.coolify.io,https:\/\/app2.coolify.io\")"
}
},
"type": "object"
}
},
"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."
},
"is_container_label_escape_enabled": {
"type": "boolean",
"default": true,
"description": "Escape special characters in labels. By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$. If you want to use env variables inside the labels, turn this off."
}
},
"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"
}
},
{
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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": {
"type": "array",
"items": {
"$ref": "#\/components\/schemas\/EnvironmentVariable"
}
}
}
}
},
"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"
}
},
{
"name": "env_uuid",
"in": "path",
"description": "UUID of the environment variable.",
"required": true,
"schema": {
"type": "string"
}
}
],
"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"
}
},
{
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
},
{
"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"
}
}
],
"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"
}
},
{
"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"
}
},
{
"name": "scheduled_backup_uuid",
"in": "path",
"description": "UUID of the backup configuration.",
"required": true,
"schema": {
"type": "string"
}
}
],
"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"
}
},
{
"name": "execution_uuid",
"in": "path",
"description": "UUID of the backup execution to delete",
"required": true,
"schema": {
"type": "string"
}
},
{
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
},
{
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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 (e.g. \"actualbudget\", \"calibre-web\", \"gitea-with-mysql\" ...)",
"type": "string"
},
"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 base64 encoded Docker Compose content."
},
"urls": {
"type": "array",
"description": "Array of URLs to be applied to containers of a service.",
"items": {
"properties": {
"name": {
"type": "string",
"description": "The service name as defined in docker-compose."
},
"url": {
"type": "string",
"description": "Comma-separated list of domains (e.g. \"http:\/\/app.coolify.io,https:\/\/app2.coolify.io\")."
}
},
"type": "object"
}
},
"force_domain_override": {
"type": "boolean",
"default": false,
"description": "Force domain override even if conflicts are detected."
}
},
"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"
},
"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"
}
}
}
},
"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"
}
}
],
"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 base64 encoded Docker Compose content."
},
"urls": {
"type": "array",
"description": "Array of URLs to be applied to containers of a service.",
"items": {
"properties": {
"name": {
"type": "string",
"description": "The service name as defined in docker-compose."
},
"url": {
"type": "string",
"description": "Comma-separated list of domains (e.g. \"http:\/\/app.coolify.io,https:\/\/app2.coolify.io\")."
}
},
"type": "object"
}
},
"force_domain_override": {
"type": "boolean",
"default": false,
"description": "Force domain override even if conflicts are detected."
}
},
"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"
},
"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"
}
}
}
},
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
},
{
"name": "env_uuid",
"in": "path",
"description": "UUID of the environment variable.",
"required": true,
"schema": {
"type": "string"
}
}
],
"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"
}
}
],
"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"
}
}
],
"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"
}
},
{
"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"
}
},
"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"
}
]
}