curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "kling-custom-element",
"model_params": {
"element_name": "My Character",
"element_description": "A young male character with short hair, wearing a white T-shirt",
"reference_type": "image_refer",
"element_image_list": {
"frontal_image": "https://example.com/front.jpg",
"refer_images": [
{
"image_url": "https://example.com/side.jpg"
}
]
}
}
}
'{
"created": 1757169743,
"id": "task-unified-1757169743-8dxnm6yz",
"model": "kling-custom-element",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 30
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 1,
"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: kling-custom-element",
"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"
}
}{
"error": {
"code": "upstream_error",
"message": "Upstream AI service unavailable",
"type": "upstream_error"
}
}Kling
Kling Custom Element
- Kling Custom Element (kling-custom-element) creates reusable subject elements (characters/objects) from reference images or videos
- After successful creation, the returned
element_idcan be referenced in Kling O3 series and Kling V3 Image-to-Video via theelement_listparameter, enabling consistent character appearance control - Asynchronous processing mode, use the returned task ID to query status
- Upon task completion,
result_datawill contain theelement_idfor video generation
Important Notes:
- This model is used to create reusable subjects (elements), it does not generate videos, no prompt / duration / quality / aspect_ratio parameters are needed
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "kling-custom-element",
"model_params": {
"element_name": "My Character",
"element_description": "A young male character with short hair, wearing a white T-shirt",
"reference_type": "image_refer",
"element_image_list": {
"frontal_image": "https://example.com/front.jpg",
"refer_images": [
{
"image_url": "https://example.com/side.jpg"
}
]
}
}
}
'{
"created": 1757169743,
"id": "task-unified-1757169743-8dxnm6yz",
"model": "kling-custom-element",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 30
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 1,
"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: kling-custom-element",
"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"
}
}{
"error": {
"code": "upstream_error",
"message": "Upstream AI service unavailable",
"type": "upstream_error"
}
}Authorizations
All APIs require Bearer Token authentication
Get API Key:
Visit API Key Management Page to get your API Key
Add to request header:
Authorization: Bearer YOUR_API_KEY
Body
application/json
Model name
Available options:
kling-custom-element Example:
"kling-custom-element"
Model parameters
Show child attributes
Show child attributes
HTTPS callback URL for task completion
Callback Timing:
- Triggered when task is completed, failed, or cancelled
- Sent after billing confirmation
Security Restrictions:
- HTTPS protocol only
- Internal 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 - Maximum
3retries after failure (at1/2/4seconds after failure) - Callback response format is consistent with task query API
- 2xx status code is considered successful, other codes trigger retry
Example:
"https://your-domain.com/webhooks/video-task-completed"
Response
Subject element creation task submitted successfully
Task creation timestamp
Example:
1757169743
Task ID
Example:
"task-unified-1757169743-8dxnm6yz"
Actual model name used
Example:
"kling-custom-element"
Task type
Available options:
video.generation.task Task progress percentage (0-100)
Required range:
0 <= x <= 100Example:
0
Task status
Available options:
pending, processing, completed, failed Example:
"pending"
Task details
Show child attributes
Show child attributes
Task output type
Available options:
video Example:
"video"
Usage and billing information
Show child attributes
Show child attributes