--- description: Projects endpoints, input fields and response shapes. --- # Projects API See the [API guide](/docs/api/) for authentication and retries, or the [endpoint index](/docs/api-operations/) for other resources. All paths below are relative to your dashboard host. ## List GitHub installations `GET /api/v1/github/installations` List one provider page of linked GitHub installations available when creating projects. Requires unrestricted team management access. **Permission:** `projects:write` · Team member · Workspace-wide access required. **MCP:** Not exposed. **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].id` | `integer` | Yes | Min -9007199254740991. | | `items[].accountLogin` | `string` | Yes | — | | `items[].accountType` | `string` | Yes | — | | `items[].repositorySelection` | `string` | Yes | — | | `nextCursor` | `string or null` | Yes | — | ## List GitHub repositories `GET /api/v1/github/repositories` List one provider page of repositories with push access in a linked installation. Continue with nextCursor even when a filtered page is empty. **Permission:** `projects:write` · Team member · Workspace-wide access required. **MCP:** Not exposed. **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | | `installationId` | `integer` | Yes | Greater than 0. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].id` | `integer` | Yes | Min -9007199254740991. | | `items[].installationId` | `integer` | Yes | Min -9007199254740991. | | `items[].fullName` | `string` | Yes | — | | `items[].defaultBranch` | `string` | Yes | — | | `items[].private` | `boolean` | Yes | — | | `nextCursor` | `string or null` | Yes | — | ## List projects `GET /api/v1/projects` List authorized active projects using a bounded cursor. **Permission:** `projects:read` · Team member. **MCP:** [`list_projects`](/docs/mcp-tools/#list_projects). **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].id` | `string` | Yes | Min 1; max 128 characters. | | `items[].teamId` | `string` | Yes | Min 1; max 128 characters. | | `items[].name` | `string` | Yes | — | | `items[].slug` | `string` | Yes | — | | `items[].repository` | `string` | Yes | — | | `items[].repositoryId` | `integer or null` | Yes | Min -9007199254740991. | | `items[].defaultServerId` | `string or null` | Yes | Min 1; max 128 characters. | | `items[].settingsVersion` | `integer` | Yes | Min 1. | | `items[].createdAt` | `string` | Yes | UTC ISO 8601 timestamp. | | `nextCursor` | `string or null` | Yes | — | ## Get project `GET /api/v1/projects/{projectId}` Read public project metadata. Secret values and private configuration snapshots are excluded. **Permission:** `projects:read` · Team member. **MCP:** [`get_project`](/docs/mcp-tools/#get_project). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **Query parameters** None. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `id` | `string` | Yes | Min 1; max 128 characters. | | `teamId` | `string` | Yes | Min 1; max 128 characters. | | `name` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `repository` | `string` | Yes | — | | `repositoryId` | `integer or null` | Yes | Min -9007199254740991. | | `defaultServerId` | `string or null` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | | `createdAt` | `string` | Yes | UTC ISO 8601 timestamp. | ## List environments `GET /api/v1/projects/{projectId}/environments` List the active environments for a project. **Permission:** `projects:read` · Team member. **MCP:** [`list_environments`](/docs/mcp-tools/#list_environments). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].id` | `string` | Yes | Min 1; max 128 characters. | | `items[].projectId` | `string` | Yes | Min 1; max 128 characters. | | `items[].name` | `string` | Yes | — | | `items[].slug` | `string` | Yes | — | | `items[].branch` | `string` | Yes | — | | `items[].isProduction` | `boolean` | Yes | — | | `items[].position` | `integer` | Yes | Min -9007199254740991. | | `items[].color` | `string` | Yes | — | | `items[].serverId` | `string or null` | Yes | Min 1; max 128 characters. | | `items[].createdAt` | `string` | Yes | UTC ISO 8601 timestamp. | | `nextCursor` | `string or null` | Yes | — | ## Get project configuration `GET /api/v1/projects/{projectId}/configuration` Read the supported Compose runtime configuration and routes. **Permission:** `projects:read` · Team member. **MCP:** [`get_project_configuration`](/docs/mcp-tools/#get_project_configuration). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **Query parameters** None. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `settingsVersion` | `integer` | Yes | Min 1. | | `runtimeConfig` | `object` | Yes | — | | `runtimeConfig.type` | `string` | Yes | Exactly `"compose"`. | | `runtimeConfig.path` | `string or null` | Yes | Min 1; max 255 characters. | | `runtimeConfig.releaseCommand` | `string or null` | Yes | max 16384 characters. | | `runtimeConfig.releaseService` | `string or null` | Yes | Min 1 characters. | | `runtimeConfig.readinessPath` | `string or null` | Yes | Pattern: `^\/`. | | `runtimeConfig.deployCommand` | `string or null` | Yes | max 16384 characters. | | `runtimeConfig.rollbackCommand` | `string or null` | Yes | max 16384 characters. | | `runtimeConfig.timeoutSeconds` | `integer` | Yes | Min 60; max 7200. | | `routes` | `object[]` | Yes | — | | `routes[].service` | `string` | Yes | Pattern: `^[A-Za-z0-9._-]+$`. Min 1 characters. | | `routes[].port` | `integer` | Yes | Min 1; max 65535. | | `routes[].path` | `string` | Yes | Min 1 characters. | | `routes[].stripPrefix` | `boolean` | Yes | Default: `false`. | | `routes[].environmentId` | `string` | No | Min 1 characters. | ## List variables `GET /api/v1/projects/{projectId}/variables` List variable names and environment scopes. Values are never returned. **Permission:** `projects:read` · Team member. **MCP:** [`list_variables`](/docs/mcp-tools/#list_variables). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].key` | `string` | Yes | — | | `items[].environmentId` | `string or null` | Yes | Min 1; max 128 characters. | | `nextCursor` | `string or null` | Yes | — | | `settingsVersion` | `integer` | Yes | Min 1. | ## List domains `GET /api/v1/projects/{projectId}/domains` List custom domains and their verification status. **Permission:** `projects:read` · Team member. **MCP:** [`list_domains`](/docs/mcp-tools/#list_domains). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].id` | `string` | Yes | Min 1; max 128 characters. | | `items[].environmentId` | `string` | Yes | Min 1; max 128 characters. | | `items[].hostname` | `string or null` | Yes | — | | `items[].basePath` | `string or null` | Yes | — | | `items[].https` | `boolean` | Yes | — | | `items[].status` | `string` | Yes | — | | `items[].createdAt` | `string` | Yes | UTC ISO 8601 timestamp. | | `nextCursor` | `string or null` | Yes | — | ## List aliases `GET /api/v1/projects/{projectId}/aliases` List generated deployment, branch, and environment aliases. **Permission:** `projects:read` · Team member. **MCP:** [`list_aliases`](/docs/mcp-tools/#list_aliases). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **Query parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `limit` | `integer` | No | Default: `25`. Min 1; max 100. | | `cursor` | `string` | No | Min 1; max 2048 characters. | **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `items` | `object[]` | Yes | max 100 items. | | `items[].id` | `string` | Yes | Min 1; max 128 characters. | | `items[].environmentId` | `string` | Yes | Min 1; max 128 characters. | | `items[].deploymentId` | `string or null` | Yes | Min 1; max 128 characters. | | `items[].hostname` | `string or null` | Yes | — | | `items[].type` | `string` | Yes | `"deployment"`, `"environment"`, `"branch"`. | | `items[].branch` | `string or null` | Yes | — | | `items[].https` | `boolean` | Yes | — | | `items[].createdAt` | `string` | Yes | UTC ISO 8601 timestamp. | | `nextCursor` | `string or null` | Yes | — | ## Rename project `PATCH /api/v1/projects/{projectId}` Rename a project using its current settings version. Resource IDs stay unchanged. **Permission:** `projects:write` · Team member. **MCP:** [`rename_project`](/docs/mcp-tools/#rename_project). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `name` | `string` | Yes | Pattern: `^[A-Za-z0-9][A-Za-z0-9._-]*[A-Za-z0-9]$`. Min 2; max 100 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `id` | `string` | Yes | Min 1; max 128 characters. | | `teamId` | `string` | Yes | Min 1; max 128 characters. | | `name` | `string` | Yes | — | | `slug` | `string` | Yes | — | | `repository` | `string` | Yes | — | | `repositoryId` | `integer or null` | Yes | Min -9007199254740991. | | `defaultServerId` | `string or null` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | | `createdAt` | `string` | Yes | UTC ISO 8601 timestamp. | ## Update variables `PATCH /api/v1/projects/{projectId}/variables` Patch write-only variables. Omitted values are preserved; deleted names are removed only in their chosen environment scope. **Permission:** `secrets:write` · Team member. **MCP:** [`update_variables`](/docs/mcp-tools/#update_variables). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `settingsVersion` | `integer` | Yes | Min 1. | | `changes` | `object[]` | Yes | Min 1; max 100 items. | | `changes[].key` | `string` | Yes | Pattern: `^[A-Za-z_][A-Za-z0-9_]*$`. max 255 characters. | | `changes[].environmentId` | `string or null` | Yes | Min 1; max 128 characters. | | `changes[].value` | `string or null` | Yes | max 65536 characters. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | ## Update project configuration `PUT /api/v1/projects/{projectId}/configuration` Replace Compose runtime configuration and routes with settings version protection. Host lifecycle command changes require their separate administrator scope. **Permission:** `projects:write` · Team member. **MCP:** [`update_project_configuration`](/docs/mcp-tools/#update_project_configuration). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `settingsVersion` | `integer` | Yes | Min 1. | | `runtimeConfig` | `object` | Yes | — | | `runtimeConfig.type` | `string` | Yes | Exactly `"compose"`. | | `runtimeConfig.path` | `string or null` | Yes | Min 1; max 255 characters. | | `runtimeConfig.releaseCommand` | `string or null` | Yes | max 16384 characters. | | `runtimeConfig.releaseService` | `string or null` | Yes | Min 1 characters. | | `runtimeConfig.readinessPath` | `string or null` | Yes | Pattern: `^\/`. | | `runtimeConfig.deployCommand` | `string or null` | Yes | max 16384 characters. | | `runtimeConfig.rollbackCommand` | `string or null` | Yes | max 16384 characters. | | `runtimeConfig.timeoutSeconds` | `integer` | Yes | Min 60; max 7200. | | `routes` | `object[]` | Yes | max 100 items. | | `routes[].service` | `string` | Yes | Pattern: `^[A-Za-z0-9._-]+$`. Min 1 characters. | | `routes[].port` | `integer` | Yes | Min 1; max 65535. | | `routes[].path` | `string` | Yes | Min 1 characters. | | `routes[].stripPrefix` | `boolean` | No | Default: `false`. | | `routes[].environmentId` | `string` | No | Min 1 characters. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | ## Delete project `DELETE /api/v1/projects/{projectId}` Delete a project and optionally queue deployed runtime removal. Requires current administrator role and the project name as confirmation. **Permission:** `projects:write` · Owner/admin. **MCP:** [`delete_project`](/docs/mcp-tools/#delete_project). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `confirmationName` | `string` | Yes | Min 1; max 100 characters. | | `removeDeployments` | `boolean` | No | Default: `true`. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | | `status` | `string` | Yes | Exactly `"deleted"`. | ## Create project `POST /api/v1/projects` Create a Compose project from a repository accessible to the owner’s linked GitHub account. Browser GitHub connection and installation consent must already be complete. **Permission:** `projects:write` · Team member · Workspace-wide access required. **MCP:** [`create_project`](/docs/mcp-tools/#create_project). **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `installationId` | `integer` | Yes | Greater than 0. | | `serverId` | `string or null` | No | — | | `composePath` | `string` | No | Min 1; max 255 characters. or Exactly `""`. | | `readinessPath` | `string` | No | — | | `releaseCommand` | `string` | No | max 16384 characters. | | `releaseService` | `string` | No | — | | `envVars` | `object[]` | No | max 100 items. | | `envVars[].key` | `string` | Yes | Pattern: `^[A-Za-z_][A-Za-z0-9_]*$`. Min 1 characters. | | `envVars[].value` | `string` | Yes | — | | `envVars[].environment` | `string` | No | — | | `projectName` | `string` | Yes | Pattern: `^[A-Za-z0-9][A-Za-z0-9._-]*[A-Za-z0-9]$`. Min 2; max 100 characters. | | `repoFullName` | `string` | Yes | Pattern: `^[^/\s]+\/[^/\s]+$`. Min 1 characters. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 201. | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | | `statusUrl` | `string` | Yes | — | ## Update environments `PUT /api/v1/projects/{projectId}/environments` Replace environment definitions with project settings version protection. Omitted server assignments are preserved. Production is required. **Permission:** `projects:write` · Team member. **MCP:** [`update_environments`](/docs/mcp-tools/#update_environments). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `environments` | `object[]` | Yes | Min 1; max 100 items. | | `environments[].id` | `string` | Yes | Min 1 characters. | | `environments[].name` | `string` | Yes | Min 1; max 255 characters. | | `environments[].slug` | `string` | Yes | Pattern: `^[A-Za-z0-9][A-Za-z0-9._-]*[A-Za-z0-9]$`. Min 2; max 255 characters. | | `environments[].branch` | `string` | Yes | Min 1; max 255 characters. | | `environments[].color` | `string` | Yes | Min 1; max 32 characters. | | `environments[].position` | `integer` | Yes | Min 0. | | `environments[].status` | `string` | Yes | `"active"`, `"deleted"`. | | `settingsVersion` | `integer` | Yes | Min 1. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | ## Update environment servers `PUT /api/v1/projects/{projectId}/environment-servers` Update default and per-environment server assignments, regenerating environment aliases. Unspecified environment assignments are preserved. **Permission:** `projects:write` · Team member. **MCP:** [`update_environment_servers`](/docs/mcp-tools/#update_environment_servers). **Path parameters** | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | **JSON body** | Field | Type | Required | Details | | --- | --- | --- | --- | | `defaultServerId` | `string or null` | Yes | Min 1; max 128 characters. | | `environmentServers` | `object[]` | Yes | max 100 items. | | `environmentServers[].environmentId` | `string` | Yes | Min 1; max 128 characters. | | `environmentServers[].serverId` | `string or null` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. | Send `Idempotency-Key` as a header, not a body field. **Response:** HTTP 200. | Field | Type | Required | Details | | --- | --- | --- | --- | | `projectId` | `string` | Yes | Min 1; max 128 characters. | | `settingsVersion` | `integer` | Yes | Min 1. |