> ## Documentation Index
> Fetch the complete documentation index at: https://docs.genviral.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Editor Project

> Read a video editor project: assets, timeline clips, and the latest render.

Returns a compact view of a project. Always read the project before editing it: take clip ids and
times from this response, never invent them.

## Time units

Two kinds of millisecond values appear, and they are not interchangeable:

* **Timeline ms**: `start_ms` and `end_ms` on a clip, and `duration_ms` on the project. Position
  in the edited video. Used by `delete_range`, `split_clip`, `trim_clip`, and `reorder_clip`.
* **Source ms**: `source_start_ms` and `source_end_ms` on a clip, and the word and gap times from
  [Get Editor Transcript](/api-reference/get-editor-transcript). Position inside the original
  asset. Used by `set_sequence`.

Send `updated_at` back as `expected_updated_at` when you edit, so a change made by someone else
in the meantime is caught instead of overwritten.

## Path Parameters

<ParamField path="projectId" type="string (UUID)" required>
  The project id.
</ParamField>

## Response

<ResponseField name="project_id" type="string" />

<ResponseField name="title" type="string" />

<ResponseField name="aspect_ratio" type="string">
  `9:16`, `1:1`, or `4:5`.
</ResponseField>

<ResponseField name="duration_ms" type="number">
  Length of the edited video, in timeline ms.
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 timestamp of the last change.
</ResponseField>

<ResponseField name="assets" type="object[]">
  `asset_id`, `name`, `url`, `poster_url`, and `duration_ms` (source ms) of each video.
</ResponseField>

<ResponseField name="clips" type="object[]">
  `clip_id`, `asset_id`, `start_ms` and `end_ms` (timeline), `source_start_ms` and
  `source_end_ms` (source), and `lane`.
</ResponseField>

<ResponseField name="render" type="object | null">
  The latest render of the current version, as in
  [Get Editor Render](/api-reference/get-editor-render) without `project_id`; `null` when it has
  never been rendered.
</ResponseField>

<ResponseField name="editor_url" type="string">
  Opens the project in the Genviral web editor, in the workspace (or personal scope) the request
  acted in. Share it with the user: they upload videos there and watch edits made through the
  API land live.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://www.genviral.io/api/partner/v1/editor/projects/b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f \
    --header 'Authorization: Bearer <token>'
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "ok": true,
    "code": 200,
    "message": "Editor project retrieved",
    "data": {
      "project_id": "b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f",
      "title": "Launch cut",
      "aspect_ratio": "9:16",
      "duration_ms": 42000,
      "updated_at": "2026-10-02T12:00:00.000Z",
      "assets": [
        {
          "asset_id": "asset_1",
          "name": "interview.mp4",
          "url": "https://example.com/interview.mp4",
          "poster_url": null,
          "duration_ms": 42000
        }
      ],
      "clips": [
        {
          "clip_id": "clip_1",
          "asset_id": "asset_1",
          "start_ms": 0,
          "end_ms": 42000,
          "source_start_ms": 0,
          "source_end_ms": 42000,
          "lane": 0
        }
      ],
      "render": null,
      "editor_url": "https://www.genviral.io/editor/b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f?workspace=personal"
    }
  }
  ```
</ResponseExample>

## Error Responses

* `401` - authentication failed (missing/invalid/revoked token)
* `404 project_not_found` - the project does not exist in the key scope
* `422 invalid_payload` - `projectId` is not a valid UUID


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.