Coolify logoCoolify
POST
/services

Create a one-click / custom service

Authorization

bearerAuth
AuthorizationBearer <token>

Go to Keys & Tokens / API tokens and create a new token. Use the token as the bearer token.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

type?string

The one-click service type (e.g. "actualbudget", "calibre-web", "gitea-with-mysql" ...)

name?string

Name of the service.

Lengthlength <= 255
description?string

Description of the service.

project_uuid*string

Project UUID.

environment_name*string

Environment name. You need to provide at least one of environment_name or environment_uuid.

environment_uuid*string

Environment UUID. You need to provide at least one of environment_name or environment_uuid.

server_uuid*string

Server UUID.

destination_uuid?string

Destination UUID. Required if server has multiple destinations.

instant_deploy?boolean

Start the service immediately after creation.

Defaultfalse
docker_compose_raw?string

The base64 encoded Docker Compose content.

urls?array<>

Array of URLs to be applied to containers of a service.

force_domain_override?boolean

Force domain override even if conflicts are detected.

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://app.coolify.io/api/v1/services" \  -H "Content-Type: application/json" \  -d '{    "project_uuid": "string",    "environment_name": "string",    "environment_uuid": "string",    "server_uuid": "string"  }'
{  "uuid": "string",  "domains": [    "string"  ]}
{  "message": "Invalid token."}
{  "message": "Unauthenticated."}
{  "message": "Domain conflicts detected. Use force_domain_override=true to proceed.",  "warning": "Using the same domain for multiple resources can cause routing conflicts and unpredictable behavior.",  "conflicts": [    {      "domain": "example.com",      "resource_name": "My Application",      "resource_uuid": "abc123-def456",      "resource_type": "application",      "message": "Domain example.com is already in use by application 'My Application'"    }  ]}
{  "message": "Validation error.",  "errors": {    "name": [      "The name field is required."    ],    "api_url": [      "The api url field is required.",      "The api url format is invalid."    ]  }}