---
title: "Change a deploy’s settings"
method: PATCH
path: "/api/computers/{id}/deploy-projects/{projectId}"
tags: ["deploys"]
---

# Change a deploy’s settings

`PATCH /api/computers/{id}/deploy-projects/{projectId}`

## Request

- Base URL: `https://www.orgo.ai`
- URL: `https://www.orgo.ai/api/computers/{id}/deploy-projects/{projectId}`
- Auth: HTTP bearer

Any of branch, root_dir, framework, port, health_path, install_cmd, build_cmd, start_cmd, auto_deploy; an Ingot repo also at (a changeset id, or null for the newest on main), and its branch stays main. The name cannot change. Changes apply from the next deploy; a port change moves its app and public URL and builds the live commit again. When the computer already has a URL on the new port, the one the deploy made goes and that build takes the one already there.

## Path parameters

- `id` string, required
- `projectId` string, uuid, required

## Request body

- UpdateDeployProject
  - `branch` string
  - `root_dir` string
  - `framework` 'auto' | 'node' | 'python' | 'dockerfile' | 'compose' | 'static'
  - `port` integer
  - `health_path` string
  - `install_cmd` string, nullable
  - `build_cmd` string, nullable
  - `start_cmd` string, nullable
  - `auto_deploy` boolean
  - `at` string, nullable: An Ingot repo’s only: the changeset a deploy builds when it names none; null is the newest on main.

## Response `200`

Changed.

- DeployProject
  - `id` string, uuid, required
  - `name` string, required: Also the name of the computer app that runs it.
  - `source` 'github_app' | 'public' | 'ingot', required
  - `repo` string, nullable, required: Null for an Ingot repo.
  - `repo_url` string, nullable
  - `installation_id` string, nullable
  - `branch` string, required: main for an Ingot repo.
  - `ingot_repo` string, nullable: An Ingot repo: <workspace>/<name> on the central Ingot server.
  - `ingot_at` string, nullable: An Ingot repo’s: the changeset a deploy builds when it names none; null is the newest on main.
  - `root_dir` string
  - `framework` 'auto' | 'node' | 'python' | 'dockerfile' | 'compose' | 'static'
  - `detected_framework` string, nullable
  - `install_cmd` string, nullable
  - `build_cmd` string, nullable
  - `start_cmd` string, nullable
  - `port` integer, required
  - `health_path` string
  - `auto_deploy` boolean
  - `disabled` string, nullable: Why pushes no longer deploy it.
  - `url` string, nullable: Its public URL, made with its first live deploy where public URLs are on.
  - `app_id` string, nullable: Its app (GET /api/computers/{id}/services).
  - `env_keys` string[]
  - `current` Deployment
    - `id` string, uuid, required
    - `project_id` string, uuid, required
    - `trigger` 'push' | 'manual' | 'rollback' | 'redeploy', required
    - `state` 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'superseded', required
    - `phase` 'preparing' | 'cloning' | 'detecting' | 'installing' | 'building' | 'starting' | 'health_check' | 'live' | 'null', nullable
    - `branch` string, required
    - `source_version` string, nullable: An Ingot repo’s: the changeset it builds, once known (the one asked for, else the one the runner found newest on main). A rollback: the changeset of the release it went back to.
    - `commit_sha` string, nullable
    - `commit_message` string, nullable
    - `commit_author` string, nullable
    - `framework` string, nullable
    - `error_code` string, nullable: Failed: build_timeout, runner_lost, computer_not_running, github_token, clone_failed, detect_failed, install_failed, build_failed, docker_unavailable, start_failed, health_check_failed, release_gone, apply_failed, ingot_missing.
    - `error` string, nullable
    - `rollback_of` string, uuid, nullable
    - `current` boolean: This deployment is the project’s live one. After a rollback it is the rollback, not the deployment it went back to.
    - `release_live` boolean: Its release is the one live now, through this deployment or another of the same release (a rollback to it, or the one this rollback went back to). Nothing to roll back to or build again.
    - `can_rollback` boolean: Its release is still on the computer and is not the one live now.
    - `created_at` string, date-time
    - `started_at` string, date-time, nullable
    - `finished_at` string, date-time, nullable
  - `deployments` Deployment[]
    - `id` string, uuid, required
    - `project_id` string, uuid, required
    - `trigger` 'push' | 'manual' | 'rollback' | 'redeploy', required
    - `state` 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'superseded', required
    - `phase` 'preparing' | 'cloning' | 'detecting' | 'installing' | 'building' | 'starting' | 'health_check' | 'live' | 'null', nullable
    - `branch` string, required
    - `source_version` string, nullable: An Ingot repo’s: the changeset it builds, once known (the one asked for, else the one the runner found newest on main). A rollback: the changeset of the release it went back to.
    - `commit_sha` string, nullable
    - `commit_message` string, nullable
    - `commit_author` string, nullable
    - `framework` string, nullable
    - `error_code` string, nullable: Failed: build_timeout, runner_lost, computer_not_running, github_token, clone_failed, detect_failed, install_failed, build_failed, docker_unavailable, start_failed, health_check_failed, release_gone, apply_failed, ingot_missing.
    - `error` string, nullable
    - `rollback_of` string, uuid, nullable
    - `current` boolean: This deployment is the project’s live one. After a rollback it is the rollback, not the deployment it went back to.
    - `release_live` boolean: Its release is the one live now, through this deployment or another of the same release (a rollback to it, or the one this rollback went back to). Nothing to roll back to or build again.
    - `can_rollback` boolean: Its release is still on the computer and is not the one live now.
    - `created_at` string, date-time
    - `started_at` string, date-time, nullable
    - `finished_at` string, date-time, nullable
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: A field is not valid.
- `404`: Not found on this computer.
- `409`: Port taken (PORT_TAKEN).
- `429`: Over one of the account's rate limits (rate_limited): `limit` names it, `retry_after` and Retry-After say how many seconds to wait. Limits are per account (the workspace owner when the request acts on a computer or a workspace) and set by its plan (x-rate-limits).

## Changes

- **2026-10-30** `afb6f0ee1aac`: 1 info
  - added the non-success response with the status `429`
- **2026-10-26** `68dbea0d710c`: 2 breaking, 1 warning, 5 info
  - the response property `repo` became nullable for the status `200`
  - the response property `repo_url` became nullable for the status `200`
  - added the new `ingot` enum value to the `source` response property for the response status `200`
  - added the new optional request property `at`
  - …4 more
- **2026-10-18** `dcaee154d80e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/orgo/apis/orgo-api/changes/api/computers/:id/deploy-projects/:projectId/patch.md)

---

[API](https://skmtc.dev/orgo/apis/orgo-api.md) - [All operations](https://skmtc.dev/orgo/apis/orgo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/orgo/apis/orgo-api/revisions/e4c1e7379fa5?raw)
