---
title: "Update Project"
method: PATCH
path: "/projects/{project_id}"
tags: ["projects"]
---

# Update Project

`PATCH /projects/{project_id}`

Update a visible project.

Args:
    project_id: Project identifier.
    request: Partial update payload.
    auth: Authenticated caller.
    service: Project service.

Returns:
    Updated project.

## Path parameters

- `project_id` string, uuid, required

## Request body

- ProjectUpdate — Request model for updating a project. ``autonomy_enabled`` is not an accepted field and must not be sent directly. Sending an unknown field raises a 422. It is no longer derived from ``adaptive_cadence`` either (ENG-5651): it is a shared gate for inference clustering, usage taxonomy and LLMAJ, and an update carrying a cadence must not disturb it.
  - `name` string, nullable — New name for the project
  - `icon` string, nullable — New icon identifier for the project
  - `repo` string, nullable — New repository reference or URL
  - `description` string, nullable — New project description
  - `tag` string, nullable — Short kebab-case label set by clustering agent
  - `observations` string, nullable — Free-text agent notes about patterns observed
  - `active_model_id` string, nullable — Active model ID for inference
  - `selected_model_id` string, nullable — [Deprecated] Use active_model_id instead.
  - `visibility` 'private' | 'team', nullable — Who can see this project: private (creator only) or team (all team members).
  - `adaptive_cadence` 'off' | 'daily' | 'weekly' | 'monthly' — User-facing cadence preset for autonomous adaptive finetuning runs.
  - `router_type` string, nullable — Retired (ENG-5673). Omit it. Any non-null value is rejected with 422; a project's stored value cannot be changed.
  - `routing_params` object, nullable — Retired (ENG-5673). Omit it. Any non-empty value is rejected with 422 (the schema enforces this alongside a non-null ``router_type``; a params-only patch is rejected one layer down by ``ProjectService.guard_router_write`` with the same 422).

## Response `200`

Successful Response

- ProjectResponse — Response model for a single project.
  - `id` string, required
  - `user_id` string, required
  - `name` string, required
  - `icon` string
  - `repo` string, nullable
  - `description` string, nullable
  - `active_model_id` string, nullable
  - `tag` string, nullable
  - `observations` string, nullable
  - `example` object, nullable
  - `team_id` string, required
  - `visibility` string
  - `adaptive_cadence` 'off' | 'daily' | 'weekly' | 'monthly' — User-facing cadence preset for autonomous adaptive finetuning runs.
  - `autonomy_enabled` boolean
  - `router_type` string, nullable
  - `routing_params` object
  - `created_at` string, required
  - `updated_at` string, required
  - `selected_model_id` string, nullable, required — Deprecated alias for active_model_id -- kept for backward compat.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/pioneer/apis/brain-api.md) · [All operations](https://skmtc.net/pioneer/apis/brain-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/pioneer/brain-api/revisions/b92f75fd3b61/schema)
