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

# Update a project

`PATCH /projects/{id}`

## Request

- Base URL: `https://api.rendley.com/v1`
- URL: `https://api.rendley.com/v1/projects/{id}`
- Auth: API key in header `Authorization`

Update a project's mutable fields. Send only the fields you want to change. Public API keys may update metadata but cannot persist project_json until SDK schema validation is available; browser sessions retain the editor save behavior.

## Path parameters

- `id` string, required

## Request body

- ProjectUpdateProjectDTO
  - `adopt_file_hashes` string[]: AdoptFileHashes lists role=pending uploads to retag role=library in the same request, AFTER the project JSON is saved — the atomic "save project + adopt pending uploads" step of the library injection flow. Adoption is skipped when the save itself fails.
  - `agent_prompt` string: AgentPrompt updates the stored handoff prompt out of band from the version-guarded document save: "" clears it (on send), non-empty sets it, nil leaves it untouched.
  - `agent_skill` string: AgentSkill is the handoff prompt's pinned workflow skill, with the same set/clear/untouched semantics as AgentPrompt.
  - `fit_duration` number
  - `name` string
  - `project_json` string
  - `template` TypesTemplateDefinition
    - `fields` TypesTemplateFieldDefinition[]
      - `alias` string: Name the author gave the field in the editor.
      - `clip_id` string: Clip a media field was promoted from.
      - `group` string: The clip, media or canvas the field belongs to.
      - `key` string: Name in POST /projects `fields`; the path when unset.
      - `label` string
      - `path` string, required: Document path, e.g. clips.<id>.text or media.<id>.url.
      - `property_id` string: Editor panel field and right-sidebar step that render it.
      - `step` string
    - `version` integer
  - `template_mode` boolean: TemplateMode turns the fields form on or off.
  - `version` integer

## Response `200`

OK

- HttpResponseResponse
  - `data` unknown
  - `error` HttpResponseAPIError
    - `code` string
    - `fields` HttpResponseFieldError[]
      - `field` string
      - `message` string
    - `message` string
  - `meta` unknown

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden

---

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