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

# Update a project

`PATCH /projects/{id}`

## Request

- Base URL: `https://api.vidmoat.com/v1`
- URL: `https://api.vidmoat.com/v1/projects/{id}`
- Auth: HTTP bearer

Rename, or change output settings: aspect ratio, frame rate, background, width and height. Timeline edits go through commands.

Send at least one field. A value the editor rejects (an unknown aspect ratio, for example) comes back as a failed entry in `results` with a 200, not as an HTTP error.

## Path parameters

- `id` string, required

## Request body

- object
  - `name` string: Up to 80 characters. Must not be empty.
  - `aspectRatio` '16:9' | '9:16' | '1:1' | '4:5' | '4:3' | '21:9': Also sets width and height (for example `9:16` is 1080x1920).
  - `fps` number: 1 to 120.
  - `background` string: CSS colour.
  - `width` integer: Pixels. Applied after `aspectRatio`.
  - `height` integer: Pixels. Applied after `aspectRatio`.

## Response `200`

Update a project

- object
  - `project` object: Summary view, after the change.
  - `results` unknown[]: One entry per command: `{ op, ok, error?, data? }`. A failed command is reported here, not as an HTTP error.
    - unknown
  - `verification` object: What happened: `accepted` (count), `failed` (`[{ op, error }]`), `blocked`, `layout` warnings, and `outcome` (`executed`, `needs-repair` or `blocked`).

## Other responses

- `400`: `invalid_request`: No supported field was sent, or `name` is empty.
- `404`: `not_found`: No such project, or it is not yours. The two are indistinguishable on purpose.
- `409`: `invalid_request`: The project changed while the batch ran (`conflictCode: "stale_rev"`, with `rev`) or is locked by an expert handoff (`help_handoff_locked`). Re-read the project and retry.

---

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