curl --request PUT \
--url https://api.geekidea.ai/v1/videos/clone/{id}/revisions/{no}/understanding \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"payload": {}
}'import requests
url = "https://api.geekidea.ai/v1/videos/clone/{id}/revisions/{no}/understanding"
payload = { "payload": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({payload: {}})
};
fetch('https://api.geekidea.ai/v1/videos/clone/{id}/revisions/{no}/understanding', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"object": "video.clone.revision",
"clone_id": "vclone_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"revision_no": 1,
"base_revision_no": 123,
"status": "waiting_input",
"run": {
"id": "run_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"object": "workflow.run",
"workflow": "geekidea/drama-episode",
"status": "running",
"progress": 40,
"auto_continue": true,
"budget_usd": 123,
"model_cost_usd": 123,
"fee_usd": 123,
"cost_usd": 123,
"held_usd": 123,
"error_code": "<string>",
"steps": [
{
"key": "storyboard",
"status": "succeeded",
"attempt": 1,
"error_code": "workflow_charge_exhausted",
"started_at": 123,
"finished_at": 123,
"confirmed_at": 123
}
],
"created_at": 123,
"finished_at": 123
},
"brief": {},
"understanding": {},
"plan": {},
"shots": [
{
"shot_key": "s01",
"source_start_ms": 0,
"source_end_ms": 3200,
"target_start_ms": 0,
"target_duration_ms": 3200,
"mode": "image_to_video",
"status": "succeeded",
"video": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
}
}
],
"assets": [
{
"id": "casset_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"object": "video.clone.asset",
"revision_no": 1,
"kind": "image",
"role": "frame",
"slot": "image:s01_first",
"shot_key": "s01",
"subject_key": "cat",
"status": "succeeded",
"selected": true,
"stale": true,
"source": "generated",
"file": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"generation_id": "<string>",
"prompt": "<string>",
"feedback": "<string>",
"error_code": "<string>",
"created_at": 123
}
],
"final_video": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"timeline": [
{}
],
"created_at": 123
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}Update the understanding
Replaces the understanding (speech handling, edits, items to keep). The plan and later steps are reset to pending and the run waits for confirmation. Returns 409 while the run is running.
curl --request PUT \
--url https://api.geekidea.ai/v1/videos/clone/{id}/revisions/{no}/understanding \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"payload": {}
}'import requests
url = "https://api.geekidea.ai/v1/videos/clone/{id}/revisions/{no}/understanding"
payload = { "payload": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({payload: {}})
};
fetch('https://api.geekidea.ai/v1/videos/clone/{id}/revisions/{no}/understanding', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"object": "video.clone.revision",
"clone_id": "vclone_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"revision_no": 1,
"base_revision_no": 123,
"status": "waiting_input",
"run": {
"id": "run_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"object": "workflow.run",
"workflow": "geekidea/drama-episode",
"status": "running",
"progress": 40,
"auto_continue": true,
"budget_usd": 123,
"model_cost_usd": 123,
"fee_usd": 123,
"cost_usd": 123,
"held_usd": 123,
"error_code": "<string>",
"steps": [
{
"key": "storyboard",
"status": "succeeded",
"attempt": 1,
"error_code": "workflow_charge_exhausted",
"started_at": 123,
"finished_at": 123,
"confirmed_at": 123
}
],
"created_at": 123,
"finished_at": 123
},
"brief": {},
"understanding": {},
"plan": {},
"shots": [
{
"shot_key": "s01",
"source_start_ms": 0,
"source_end_ms": 3200,
"target_start_ms": 0,
"target_duration_ms": 3200,
"mode": "image_to_video",
"status": "succeeded",
"video": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
}
}
],
"assets": [
{
"id": "casset_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"object": "video.clone.asset",
"revision_no": 1,
"kind": "image",
"role": "frame",
"slot": "image:s01_first",
"shot_key": "s01",
"subject_key": "cat",
"status": "succeeded",
"selected": true,
"stale": true,
"source": "generated",
"file": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"generation_id": "<string>",
"prompt": "<string>",
"feedback": "<string>",
"error_code": "<string>",
"created_at": 123
}
],
"final_video": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"timeline": [
{}
],
"created_at": 123
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}{
"error": {
"message": "The model does not exist or you do not have access to it.",
"type": "not_found_error",
"param": "model",
"code": "model_not_found",
"retryable": false,
"errors": [
{
"param": "messages",
"code": "missing_parameter",
"message": "<string>"
}
]
}
}Authorizations
Provide your API key in the Authorization header using Bearer auth
Body
Replaces the understanding or the plan of a revision.
New content with the same structure as understanding / plan in the revision detail (snake_case fields)
Show child attributes
Show child attributes
Response
OK
A revision (GET /v1/videos/clone/{id}/revisions/{no}): steps, brief, understanding, plan, shots, assets and final video.
Always video.clone.revision
"video.clone.revision"
Video clone ID
"vclone_0192f1c3a7b87c3e9a4f5b6c7d8e9f01"
Revision number
1
Revision it was created from
producing / waiting_input / completed / failed / cancelled
producing, waiting_input, completed, failed, cancelled "waiting_input"
A workflow run
Show child attributes
Show child attributes
Brief of this revision: request, reference images and models
Show child attributes
Show child attributes
Understanding of the reference video; editable
Show child attributes
Show child attributes
Production plan; editable
Show child attributes
Show child attributes
Shots
Show child attributes
Show child attributes
All asset candidates
Show child attributes
Show child attributes
A file with a signed download link.
Show child attributes
Show child attributes
Timeline of the final video
Show child attributes
Show child attributes
Creation time (Unix seconds)
