---
title: "Update a project"
method: PATCH
path: "/projects/{id}"
tags: ["Projects"]
---

# Update a project

`PATCH /projects/{id}`

## Request

- Base URL: `https://app.gc.ai/api/external/v1`
- URL: `https://app.gc.ai/api/external/v1/projects/{id}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/gc-ai/apis/gc-ai-external-api/docs/projects/:id/patch.ts> (a function with typed inputs; its response is checked against the schema)

Update a project's name, description, or custom instructions. Only the fields you supply are changed; omitted fields are left untouched. Pass `null` for `description` or `custom_instructions` to clear them.

Requires write access to the project. Org-scoped keys can update non-access-controlled projects.

## Path parameters

- `id` string, uuid, required: The project ID

## Request body

- UpdateProjectRequest
  - `name` string: New project name (non-empty after trim)
  - `description` string, nullable: New project description, or null to clear it
  - `custom_instructions` string, nullable: New custom instructions for chats in this project, or null to clear them

## Response `200`

Updated project

- ProjectResponse
  - `id` string, uuid, required: Unique project identifier
  - `name` string, required: Project name
  - `description` string, nullable, required: Project description, or null if unset
  - `custom_instructions` string, nullable, required: Custom instructions injected into chats opened in this project
  - `is_access_controlled` boolean, required: When true, only the creator and explicitly granted users can see the project. When false, any member of the organization can see it.
  - `my_access_level` 'read' | 'write' | 'admin' | 'null', nullable, required: Caller's access level on this project: `admin` (creator or explicitly granted admin), `write`, `read`, or `null` if the caller has no recorded grant. `null` is also returned for org-scoped keys, which carry no user identity.
  - `created_at` string, required: ISO 8601 creation timestamp
  - `updated_at` string, required: ISO 8601 last-update timestamp

## Other responses

- `400`: Invalid request body
- `401`: Missing or malformed API key
- `403`: Invalid API key
- `404`: Project not found or insufficient write access
- `429`: Rate limit exceeded. See [Rate Limits](https://docs.gc.ai/api-reference/concepts/rate-limits) for the tiers, limits, and how to back off.
- `500`: Internal server error
- `503`: Service temporarily unavailable

---

[API](https://skmtc.dev/gc-ai/apis/gc-ai-external-api.md) - [All operations](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/revisions/2bbdfddf7107?raw)
