curl --request GET \
--url https://www.genviral.io/api/partner/v1/editor/projects/b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f \
--header 'Authorization: Bearer <token>'
{
"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
}
}
Video Editor
Get Editor Project
Read a video editor project: assets, timeline clips, and the latest render.
GET
/
api
/
partner
/
v1
/
editor
/
projects
/
{projectId}
curl --request GET \
--url https://www.genviral.io/api/partner/v1/editor/projects/b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f \
--header 'Authorization: Bearer <token>'
{
"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
}
}
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_msandend_mson a clip, andduration_mson the project. Position in the edited video. Used bydelete_range,split_clip,trim_clip, andreorder_clip. - Source ms:
source_start_msandsource_end_mson a clip, and the word and gap times from Get Editor Transcript. Position inside the original asset. Used byset_sequence.
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
string (UUID)
required
The project id.
Response
string
string
string
9:16, 1:1, or 4:5.number
Length of the edited video, in timeline ms.
string
ISO 8601 timestamp of the last change.
object[]
asset_id, name, url, poster_url, and duration_ms (source ms) of each video.object[]
clip_id, asset_id, start_ms and end_ms (timeline), source_start_ms and
source_end_ms (source), and lane.object | null
The latest render of the current version, as in
Get Editor Render without
project_id; null when it has
never been rendered.curl --request GET \
--url https://www.genviral.io/api/partner/v1/editor/projects/b1d4e8f2-3a5c-4d7e-8f90-1a2b3c4d5e6f \
--header 'Authorization: Bearer <token>'
{
"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
}
}
Error Responses
401- authentication failed (missing/invalid/revoked token)404 project_not_found- the project does not exist in the key scope422 invalid_payload-projectIdis not a valid UUID
