curl --request POST \
--url https://api.geekidea.ai/v1/videos/clone/{id}/revisions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"base_revision_no": 1,
"prompt": "猫换成柴犬,其余不变",
"reference_file_ids": [
"<string>"
],
"understand_model": "<string>",
"image_model": "<string>",
"video_model": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"max_duration_seconds": 150,
"audio_policy": "<string>",
"voice_model": "<string>",
"voice": "<string>",
"budget_usd": 1
}
'import requests
url = "https://api.geekidea.ai/v1/videos/clone/{id}/revisions"
payload = {
"base_revision_no": 1,
"prompt": "猫换成柴犬,其余不变",
"reference_file_ids": ["<string>"],
"understand_model": "<string>",
"image_model": "<string>",
"video_model": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"max_duration_seconds": 150,
"audio_policy": "<string>",
"voice_model": "<string>",
"voice": "<string>",
"budget_usd": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
base_revision_no: 1,
prompt: '猫换成柴犬,其余不变',
reference_file_ids: ['<string>'],
understand_model: '<string>',
image_model: '<string>',
video_model: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
max_duration_seconds: 150,
audio_policy: '<string>',
voice_model: '<string>',
voice: '<string>',
budget_usd: 1
})
};
fetch('https://api.geekidea.ai/v1/videos/clone/{id}/revisions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "vclone_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"object": "video.clone",
"status": "producing",
"current_revision_no": 1,
"source": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"source_url": "<string>",
"source_duration_ms": 123,
"prompt": "<string>",
"models": {
"understand": "<string>",
"image": "<string>",
"video": "<string>",
"voice": "<string>"
},
"aspect_ratio": "auto",
"resolution": "720p",
"max_duration_seconds": 300,
"audio_policy": "keep",
"voice": "<string>",
"auto_confirm": true,
"revisions": [
{
"revision_no": 1,
"base_revision_no": 123,
"status": "producing",
"run_id": "wfr_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"progress": 40,
"final_video": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"created_at": 123
}
],
"end_user": "<string>",
"metadata": {},
"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>"
}
]
}
}Create a revision
Starts a new revision from base_revision_no (default: the current one). The reference video stays the same and the understanding of the base revision is reused, so import and understand are skipped and production restarts from the plan. Fields left out keep the base revision’s values. The new revision becomes current; returns 409 while the current revision is running.
curl --request POST \
--url https://api.geekidea.ai/v1/videos/clone/{id}/revisions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"base_revision_no": 1,
"prompt": "猫换成柴犬,其余不变",
"reference_file_ids": [
"<string>"
],
"understand_model": "<string>",
"image_model": "<string>",
"video_model": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"max_duration_seconds": 150,
"audio_policy": "<string>",
"voice_model": "<string>",
"voice": "<string>",
"budget_usd": 1
}
'import requests
url = "https://api.geekidea.ai/v1/videos/clone/{id}/revisions"
payload = {
"base_revision_no": 1,
"prompt": "猫换成柴犬,其余不变",
"reference_file_ids": ["<string>"],
"understand_model": "<string>",
"image_model": "<string>",
"video_model": "<string>",
"aspect_ratio": "<string>",
"resolution": "<string>",
"max_duration_seconds": 150,
"audio_policy": "<string>",
"voice_model": "<string>",
"voice": "<string>",
"budget_usd": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
base_revision_no: 1,
prompt: '猫换成柴犬,其余不变',
reference_file_ids: ['<string>'],
understand_model: '<string>',
image_model: '<string>',
video_model: '<string>',
aspect_ratio: '<string>',
resolution: '<string>',
max_duration_seconds: 150,
audio_policy: '<string>',
voice_model: '<string>',
voice: '<string>',
budget_usd: 1
})
};
fetch('https://api.geekidea.ai/v1/videos/clone/{id}/revisions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "vclone_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"object": "video.clone",
"status": "producing",
"current_revision_no": 1,
"source": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"source_url": "<string>",
"source_duration_ms": 123,
"prompt": "<string>",
"models": {
"understand": "<string>",
"image": "<string>",
"video": "<string>",
"voice": "<string>"
},
"aspect_ratio": "auto",
"resolution": "720p",
"max_duration_seconds": 300,
"audio_policy": "keep",
"voice": "<string>",
"auto_confirm": true,
"revisions": [
{
"revision_no": 1,
"base_revision_no": 123,
"status": "producing",
"run_id": "wfr_0192f1c3a7b87c3e9a4f5b6c7d8e9f01",
"progress": 40,
"final_video": {
"file_id": "<string>",
"url": "<string>",
"mime": "<string>",
"width": 123,
"height": 123
},
"created_at": 123
}
],
"end_user": "<string>",
"metadata": {},
"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
Headers
Path Parameters
Video clone ID
Body
Creates a new revision from an existing one (POST /v1/videos/clone/{id}/revisions). Fields left out keep the base revision's values; the body may be omitted.
Revision to start from (default: the current one); it must already have an understanding
x >= 11
New request
4000"猫换成柴犬,其余不变"
New reference images; replaces the whole list when given
12New reference images; replaces the whole list when given
Text model
Image model
Video model
auto, 9:16, 16:9 or 1:1
720p or 1080p
Maximum length of the final video in seconds (1–300)
1 <= x <= 300keep, mute, dub or generated
Speech model for dub
Voice for the voiceover
64Budget limit for this revision (USD)
x >= 0Response
OK
A video clone task (POST /v1/videos/clone, GET /v1/videos/clone/{id}). The settings are those of the current revision.
Video clone ID
"vclone_0192f1c3a7b87c3e9a4f5b6c7d8e9f01"
Always video.clone
"video.clone"
Status of the current revision: draft / producing / waiting_input / completed / failed / cancelled
draft, producing, waiting_input, completed, failed, cancelled "producing"
Current revision number
1
A file with a signed download link.
Show child attributes
Show child attributes
Link given as source_url
Reference video length (ms), after it has been probed
Request of the current revision
Models used by the video clone.
Show child attributes
Show child attributes
Requested aspect ratio; the plan has the one actually used
"auto"
Resolution
"720p"
Maximum length of the final video (seconds)
300
keep / mute / dub / generated
keep, mute, dub, generated "keep"
Voice for the voiceover
Whether steps are confirmed automatically
Revisions, oldest first
Show child attributes
Show child attributes
End-user identifier
Caller metadata
Show child attributes
Show child attributes
Creation time (Unix seconds)
