---
title: "Save Project State"
method: PUT
path: "/api/projects/{job_id}/state"
---

# Save Project State

`PUT /api/projects/{job_id}/state`

## Request

- Base URL: `https://api.openshorts.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openshorts.app/api/projects/{job_id}/state`
- Auth: none declared

Persist the browser-only edit state of a project's clips.

Body: {"clips": [{"index", "active_layers", "server_file"?}]}. The Remotion
layers exist nowhere but the browser, so the frontend syncs them here
(debounced) to survive reload / reopen.

## Path parameters

- `job_id` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

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