# Coolify v4.1.2 on this instance — hard realities (learned the hard way) > Written while deploying `cotizador` (Next.js + FastAPI + Postgres, Docker Compose > build pack, private repo). These are behaviors of the **specific** instance at > `https://coolify.urieljareth.org`, verified empirically with a root-team token. > Re-check with `GET /api/v1/version` — if it changed, re-verify the API surface. ## 1. The REST API surface is PARTIAL — `/applications/*` is 404 With a valid **root-team** token (`GET /teams/current` → "Root Team"): | Endpoint | Result | |----------|--------| | `GET /version`, `GET /teams/current` | 200 | | `GET /projects`, `POST /projects` | 200 / 201 | | `GET /projects/{uuid}/environments` | 200 | | `GET /servers` | 200 | | `POST /security/keys` (create private key) | 201 | | `GET /resources` | 200 — **the only reliable app/service/db inventory** | | `GET /services`, `POST /services`, `/services/{uuid}/envs`, `/start` | work | | `GET /deploy?uuid=[&force=true]` | 200 — **triggers a deploy of any existing resource by uuid** | | `GET /deployments/{deployment_uuid}` | 200 — status + logs (logs = JSON string) | | **`/applications` (list)** | **404** | | **`/applications/{uuid}` (get / PATCH)** | **404** | | **`/applications/{uuid}/envs` (list/create)** | **404** | | **`/applications/{uuid}/logs`** | **404** | | **`POST /applications/public`** | **404** | | **`POST /applications/dockerfile`** | **404** | | **`POST /applications/private-deploy-key`** | **404** | | **`POST /applications/private-github-app`** | **404** | | **`POST /applications/dockercompose`** | **404** (deprecated upstream anyway) | | `GET /github-apps` | 404 | **Consequence:** you CANNOT create OR configure a **git-based application that builds from source** (Dockerfile or Docker Compose build pack) via the API here. The skill's `New-CoolifyApplication.ps1` (POST /applications/public) will 404 on this instance. `POST /services` only accepts `docker_compose_raw` with **no git repo** → only good for **prebuilt-image** stacks, not `build:`-from-source composes. → For git+build apps you MUST use the **web UI** (drive it with Playwright). Application config (build pack, env vars, domains) is UI-only. Only the **deploy trigger** is API-able (`GET /deploy?uuid=`), and reads via `/resources` + `/deployments/{uuid}`. ## 2. Inventory & status via `/resources` `GET /resources` returns every application/service/database with `uuid`, `name`, `status` (e.g. `running:healthy`, `exited:unhealthy`), `fqdn`, `build_pack`, `git_repository`, `docker_compose_location`, `docker_compose_raw`, `docker_compose` (parsed), `source_type`/`source_id`, `environment_id`, `destination`. Map an app's `environment_id` to a project by scanning `/projects/{uuid}/environments`. Build the UI URL as: `https://coolify.urieljareth.org/project/{project_uuid}/environment/{env_uuid}/application/{app_uuid}` (+ `/environment-variables`, `/logs`, `/deployment`, `/source`, `/danger`, …) ## 3. Driving the UI with Playwright (Livewire app) - Login: `/login`, fill `input[type=email]` + `input[type=password]`, submit; save `storageState` and reuse it (see `scripts/coolify-ui/coolify-login.mjs`). - Import Playwright from the manager repo when the script lives elsewhere: `createRequire('/package.json')` then `require('playwright')`. - Dismiss recurring popups: buttons "Accept and Close", "Acknowledge & Disable This Popup", "Maybe next time". - **Build Pack** is a `