---
title: "UpdateProjects"
method: POST
path: "/gitpod.v1.ProjectService/UpdateProjects"
tags: ["gitpod.v1.ProjectService"]
---

# UpdateProjects

`POST /gitpod.v1.ProjectService/UpdateProjects`

Updates multiple projects in a single request.

 Use this method to:
 - Bulk update project configurations
 - Modify multiple projects at once
 - Reduce API calls when updating many projects

 ### Examples

 - Update multiple projects:

   Updates several projects in one request.

   ```yaml
   projects:
     - projectId: "b0e12f6c-4c67-429d-a4a6-d9838b5da047"
       name: "Updated Frontend"
     - projectId: "c1f23g7d-5d78-430e-b5b7-e0949c6eb158"
       name: "Updated Backend"
   ```

## Request body

- GitpodV1UpdateProjectsRequest
  - `projects` GitpodV1UpdateProjectRequest[]
    - `automationsFilePath` string, nullable — automations_file_path is the path to the automations file relative to the repo root path must not be absolute (start with a /): ``` this.matches('^$|^[^/].*') ```
    - `devcontainerFilePath` string, nullable — devcontainer_file_path is the path to the devcontainer file relative to the repo root path must not be absolute (start with a /): ``` this.matches('^$|^[^/].*') ```
    - `initializer` GitpodV1EnvironmentInitializer — unresolved $ref
    - `name` string, nullable
    - `prebuildConfiguration` GitpodV1ProjectPrebuildConfiguration — ProjectPrebuildConfiguration defines how prebuilds are created for a project. Prebuilds create environment snapshots that enable faster environment startup times.
      - `enableJetbrainsWarmup` boolean — enable_jetbrains_warmup controls whether JetBrains IDE warmup runs during prebuilds.
      - `enabled` boolean — enabled controls whether prebuilds are created for this project. When disabled, no automatic prebuilds will be triggered.
      - `environmentClassIds` string[] — environment_class_ids specifies which environment classes should have prebuilds created. If empty, no prebuilds are created.
      - `executor` GitpodV1Subject
        - `id` string, uuid — id is the UUID of the subject
        - `principal` 'PRINCIPAL_UNSPECIFIED' | 'PRINCIPAL_ACCOUNT' | 'PRINCIPAL_USER' | 'PRINCIPAL_RUNNER' | 'PRINCIPAL_ENVIRONMENT' | 'PRINCIPAL_SERVICE_ACCOUNT' | 'PRINCIPAL_RUNNER_MANAGER' | 'PRINCIPAL_AGENT_EXECUTION'
      - `timeout` string, regex — A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # Examples Example 1: Compute Duration from two Timestamps in pseudo code. Timestamp start = ...; Timestamp end = ...; Duration duration = ...; duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos; if (duration.seconds < 0 && duration.nanos > 0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (duration.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; } Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. Timestamp start = ...; Duration duration = ...; Timestamp end = ...; end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos; if (end.nanos < 0) { end.seconds -= 1; end.nanos += 1000000000; } else if (end.nanos >= 1000000000) { end.seconds += 1; end.nanos -= 1000000000; } Example 3: Compute Duration from datetime.timedelta in Python. td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td) # JSON Mapping In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".
      - `trigger` GitpodV1PrebuildTrigger — PrebuildTrigger defines when prebuilds should be created for a project.
        - `dailySchedule` GitpodV1PrebuildTriggerDailySchedule, required — DailySchedule triggers prebuilds once per day at a specified hour.
          - `hourUtc` integer — hour_utc is the hour of day (0-23) in UTC when the prebuild should start. The actual start time may be adjusted by a few minutes to balance system load.
    - `projectId` string, uuid — project_id specifies the project identifier
    - `recommendedEditors` GitpodV1RecommendedEditors — RecommendedEditors contains the map of recommended editors and their versions.
      - `editors` object — editors maps editor aliases to their recommended versions. Key is the editor alias (e.g., "intellij", "goland", "vscode"). Value contains the list of recommended versions for that editor. If versions list is empty, all available versions are recommended. Example: {"intellij": {versions: ["2025.1", "2024.3"]}, "goland": {}}
    - `technicalDescription` string, nullable — technical_description is a detailed technical description of the project This field is not returned by default in GetProject or ListProjects responses 8KB max

## Response `200`

Success

- GitpodV1UpdateProjectsResponse
  - `failedProjects` GitpodV1UpdateProjectsResponseFailure[] — failed_projects contains details about projects that failed to update
    - `error` string — error describes why the project update failed
    - `index` integer — index is the position in the request array (0-based)
    - `projectId` string — project_id is the project ID that failed
  - `updatedProjects` GitpodV1Project[] — updated_projects contains the successfully updated projects — unresolved $ref

## Other responses

- `default` — Error

## Changes

- **2026-02-11** `b97dcde84128` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/gitpod-io/apis/gitpod-v1/changes/gitpod.v1.ProjectService/UpdateProjects/post.md)

---

[API](https://skmtc.dev/gitpod-io/apis/gitpod-v1.md) · [All operations](https://skmtc.dev/gitpod-io/apis/gitpod-v1/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/gitpod-io/gitpod-v1/revisions/b97dcde84128/schema)
