curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "happyhorse-1.1-reference-to-video",
"prompt": "A woman in a red qipao character1, the camera first frames the slim cut of the qipao from a side medium shot, then switches to a low-angle upward shot capturing details as she gracefully lifts her hand to open a folding fan character2, with tasseled earrings character3 swaying lightly as she turns her head.",
"image_urls": [
"https://cdn.example.com/girl.jpg",
"https://cdn.example.com/folding-fan.jpg",
"https://cdn.example.com/earrings.jpg"
],
"quality": "720p",
"aspect_ratio": "16:9",
"duration": 5
}
'{
"created": 1761313744,
"id": "task-unified-1761313744-h1r2vef0",
"model": "happyhorse-1.1-reference-to-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 2400,
"video_duration": 5
},
"type": "video",
"usage": {
"billing_rule": "per_second",
"credits_reserved": 607500,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: happyhorse-1.1-reference-to-video",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}HappyHorse 1.1 Reference-to-Video
- HappyHorse 1.1 reference-to-video, supports 1–9 reference images plus a text prompt
- Character reference convention: in
prompt, usecharacter1,character2,character3… keywords to reference the images inimage_urlsarray in order - Asynchronous processing mode, use the returned task ID to query status
- Generated video links are valid for 24 hours, please save them promptly
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "happyhorse-1.1-reference-to-video",
"prompt": "A woman in a red qipao character1, the camera first frames the slim cut of the qipao from a side medium shot, then switches to a low-angle upward shot capturing details as she gracefully lifts her hand to open a folding fan character2, with tasseled earrings character3 swaying lightly as she turns her head.",
"image_urls": [
"https://cdn.example.com/girl.jpg",
"https://cdn.example.com/folding-fan.jpg",
"https://cdn.example.com/earrings.jpg"
],
"quality": "720p",
"aspect_ratio": "16:9",
"duration": 5
}
'{
"created": 1761313744,
"id": "task-unified-1761313744-h1r2vef0",
"model": "happyhorse-1.1-reference-to-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 2400,
"video_duration": 5
},
"type": "video",
"usage": {
"billing_rule": "per_second",
"credits_reserved": 607500,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: happyhorse-1.1-reference-to-video",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Authorizations
##All endpoints require Bearer Token authentication##
Get API Key:
Visit the API Key Management Page to obtain your API Key
Add to request header:
Authorization: Bearer YOUR_API_KEY
Body
Video generation model name
happyhorse-1.1-reference-to-video "happyhorse-1.1-reference-to-video"
Text prompt, required
Length limits:
- Chinese: up to
2500characters - Non-Chinese: up to
5000characters - Excess content is automatically truncated
Character reference convention (important):
- The prompt must explicitly use
character1,character2,character3... keywords to reference images inimage_urlsin order - The 1st image corresponds to
character1, the 2nd tocharacter2, and so on - Missing explicit references may cause character confusion
"A woman in a red qipao character1, the camera first frames the slim cut of the qipao from a side medium shot, then switches to a low-angle upward shot capturing details as she gracefully lifts her hand to open a folding fan character2, with tasseled earrings character3 swaying lightly as she turns her head."
Reference image URL array, required, 1 ~ 9 images
Image requirements:
- Supported formats: JPEG, JPG, PNG, WEBP
- Resolution: short edge ≥
400px; 720P or higher quality images are recommended (avoid extremely small, blurry, or heavily compressed images) - Recommended aspect ratio: short edge / long edge ≥
0.4, with consistent proportions across images (close to the target video ratio) - File size: ≤
10MBper image - Image URLs must be publicly accessible (HTTP or HTTPS); private OSS, intranet, or authenticated links are not supported
Order: Array order corresponds to character1, character2 ... references in the prompt
1 - 9 elements[
"https://cdn.example.com/girl.jpg",
"https://cdn.example.com/folding-fan.jpg",
"https://cdn.example.com/earrings.jpg"
]
Video resolution tier, defaults to 720p
Options:
720p: Standard clarity, this is the default1080p: HD clarity
Billing note: Resolution tier directly affects billing
720p, 1080p "720p"
Video aspect ratio, defaults to 16:9
Options:
16:9(landscape)9:16(portrait)1:1(square)4:33:44:55:49:2121:9
16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 "16:9"
Video duration (seconds), defaults to 5 seconds
Range:
- Integer
3~15 - Duration directly affects billing
3 <= x <= 155
Random seed, default is random
Details:
- Range:
1~2147483647 - A fixed seed reduces parameter-induced variation when iterating on prompts and improves reproducibility
1 <= x <= 214748364742
HTTPS callback URL for task completion
Callback timing:
- Triggered when the task is completed, failed, or cancelled
- Sent after billing confirmation is complete
Security restrictions:
- Only HTTPS protocol is supported
- Callbacks to private IP addresses are prohibited (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- URL length must not exceed
2048characters
Callback mechanism:
- Timeout:
10seconds - Up to
3retries after failure (at1/2/4seconds after failure respectively) - Callback response body format is consistent with the task query endpoint response format
- A 2xx status code is considered successful; other status codes trigger retries
"https://your-domain.com/webhooks/video-task-completed"
Response
Video generation task created successfully
Task creation timestamp
1761313744
Task ID
"task-unified-1761313744-h1r2vef0"
Actual model name used
"happyhorse-1.1-reference-to-video"
Specific type of the task
video.generation.task Task progress percentage (0-100)
0 <= x <= 1000
Task status
pending, processing, completed, failed, cancelled "pending"
Video task details
Show child attributes
Show child attributes
Output type of the task
text, image, audio, video "video"
Usage and billing information
Show child attributes
Show child attributes