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

# Update Project

`PATCH /v1/orgs/{org_id}/projects/{project_id}`

## Request

- Base URL: `https://api.sonenta.dev`
- URL: `https://api.sonenta.dev/v1/orgs/{org_id}/projects/{project_id}`
- Auth: none declared

## Path parameters

- `org_id` string, required
- `project_id` string, required

## Request body

- ProjectPatchIn
  - `name` string, nullable
  - `description` string, nullable
  - `source_language` string, nullable
  - `settings` object, nullable
  - `auto_translate_missing` boolean, nullable
  - `reset_old_source_to_review` boolean

## Response `200`

Successful Response

- ProjectOut
  - `uuid` string, required
  - `org_uuid` string, required
  - `slug` string, required
  - `name` string, required
  - `description` string, nullable
  - `source_language` string, required
  - `settings` object
  - `cdn_publish_roles_effective` string[]: Roles allowed to publish this project to the CDN, resolved from `settings.cdn_publish_roles` (or the developer+ default when unset). Read-only; edit via `settings.cdn_publish_roles`.
  - `require_approval_before_publish` boolean
  - `key_count` integer: Active keys in the production version (computed live, never the denormalised counter).
  - `language_count` integer, required: Languages configured on the project, SOURCE INCLUDED (no target language = 1).
  - `completion_pct` integer, required: 0..100 on the production version: pairs (target language x active key with a non-empty source value) at status translated/reviewed/approved, over all such pairs; 0 when there is none. Source language excluded. (`/coverage` is being aligned on this definition in #389.)
  - `open_task_count` integer, required: Project tasks still pending: status `open` or `in_progress` (`done`/`dismissed` are closed).
  - `role` 'owner' | 'admin' | 'developer' | 'translator' | 'qa' | 'reviewer' | 'viewer', nullable
  - `auto_translate_missing` boolean
  - `auto_translate_paused_until` string, date-time, nullable
  - `auto_translate_last_burst_at` string, date-time, nullable
  - `auto_translate_last_burst_count` integer, nullable
  - `auto_translate_last_burst_keys` string[]
  - `bunny_zone_id` string, nullable
  - `cdn_hostname` string, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `source_language_changed` boolean
  - `cdn_republish_recommended` boolean
  - `old_source_rows_reset` integer

## Other responses

- `422`: Validation Error

---

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