Create Happy Horse — Video Edit
curl --request POST \
--url https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": true,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
}
}
'import requests
url = "https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit"
payload = { "input": {
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": True,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
prompt: 'Recolor the sky to a deep purple sunset.',
duration: 5,
resolution: '1080p',
audio_setting: 'auto',
enable_safety_checker: true,
video_url: 'https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4'
}
})
};
fetch('https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"run_id": "<string>",
"endpoint": "<string>",
"model": "<string>",
"capability": "<string>",
"mode": "<string>",
"status": "queued",
"created_at": "2023-11-07T05:31:56Z",
"output": {},
"error": {
"type": "<string>",
"code": 123,
"message": "<string>"
},
"billing": {
"amount": "<string>",
"currency": "usd"
},
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"elapsed_ms": 123
}Alibaba
Happy Horse — Video Edit
Alibaba Happy Horse video-edit: natural-language edits on a source clip with optional reference images. Optimized for video to video via apisale.
POST
/
v1
/
run
/
alibaba
/
happy-horse
/
video-edit
Create Happy Horse — Video Edit
curl --request POST \
--url https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": true,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
}
}
'import requests
url = "https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit"
payload = { "input": {
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": True,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
prompt: 'Recolor the sky to a deep purple sunset.',
duration: 5,
resolution: '1080p',
audio_setting: 'auto',
enable_safety_checker: true,
video_url: 'https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4'
}
})
};
fetch('https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"run_id": "<string>",
"endpoint": "<string>",
"model": "<string>",
"capability": "<string>",
"mode": "<string>",
"status": "queued",
"created_at": "2023-11-07T05:31:56Z",
"output": {},
"error": {
"type": "<string>",
"code": 123,
"message": "<string>"
},
"billing": {
"amount": "<string>",
"currency": "usd"
},
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"elapsed_ms": 123
}Overview
Alibaba Happy Horse video-edit: natural-language edits on a source clip with optional reference images. Optimized for video to video via apisale.Docs = API contract + Try it (snapshot). Explore = browser playground. Model page = product examples.
Endpoint
POST https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit
| Model slug | alibaba/happy-horse/video-edit |
| Category | Video to Video (video-to-video) |
| Lab | Alibaba |
| Mode | async |
Pricing
From $0.087/sec apisale price is 30% below the vendor’s official list price.| Tier | Unit | Official price | apisale price |
|---|---|---|---|
| 66633fd1-0e8f-4011-ba3e-ea571276f309 | second | $0.125 | $0.087 |
| fcdb7a94-c0f0-4077-99e4-a5640135c555 | second | $0.222 | $0.155 |
Official price = vendor list price. apisale price = what you pay through apisale.
Request
{
"input": {
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": true,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
}
}
Parameters
Fields marked * are required. UseAuthorization: Key YOUR_API_KEY for REST.
number
Optional random seed for reproducibility.
string
required
Text prompt for video generation. Maximum 2500 characters.
number
Billing estimate in seconds (3–15). Actual output matches source length, capped at 15s. Default:
5 Values: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 Range: 3 – 15string
required
Source video URL (MP4/MOV, 3–60s; output capped at 15s).
string
Default:
1080p Values: 720p, 1080pstring
auto = model may regenerate audio; origin = keep source audio. Default:
auto Values: auto, originarray
Optional reference images (@Image1…@Image5 in prompt).
boolean
Content moderation on input and output. Default:
truestring
Optional HTTPS webhook when the run reaches a terminal state.
boolean
Block until completion (same Run response shape).
Input schema
Input schema
{
"params": {
"seed": {
"type": "int",
"description": "Optional random seed for reproducibility."
},
"prompt": {
"type": "string",
"required": true,
"max_length": 2500,
"description": "Text prompt for video generation. Maximum 2500 characters."
},
"duration": {
"max": 15,
"min": 3,
"type": "int",
"values": [
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15
],
"default": 5,
"description": "Billing estimate in seconds (3–15). Actual output matches source length, capped at 15s."
},
"video_url": {
"type": "media",
"required": true,
"description": "Source video URL (MP4/MOV, 3–60s; output capped at 15s)."
},
"resolution": {
"type": "enum",
"values": [
"720p",
"1080p"
],
"default": "1080p"
},
"audio_setting": {
"type": "enum",
"values": [
"auto",
"origin"
],
"default": "auto",
"description": "auto = model may regenerate audio; origin = keep source audio."
},
"reference_image_urls": {
"type": "array<media>",
"max_items": 5,
"description": "Optional reference images (@Image1…@Image5 in prompt)."
},
"enable_safety_checker": {
"type": "bool",
"default": true,
"description": "Content moderation on input and output."
}
}
}
Submit response
Returns a Run withrun_id. Poll with GET /v1/runs/{run_id} or use Try it above.
string
required
Unique run ID — save for polling and webhooks.
string
required
queued (async) or terminal state for sync runs.object
Result when
status is succeeded — see Output schema below.Example (async submit)
{
"run_id": "run_550e8400-e29b-41d4-a716-446655440000",
"endpoint": "alibaba/happy-horse/video-edit",
"model": "video-edit",
"capability": "video",
"mode": "video-to-video",
"status": "queued",
"output": null,
"error": null,
"billing": null,
"created_at": "2026-06-27T12:00:00.000Z",
"started_at": null,
"completed_at": null,
"elapsed_ms": null
}
Output
Whenstatus is succeeded, output follows this schema:
Output schema
Output schema
{
"type": "object",
"example": {
"videos": [
{
"url": "https://cdn.example.com/tasks/0.mp4"
}
]
},
"required": [
"videos"
],
"properties": {
"videos": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
}
}
}
}
},
"description": "Succeeded task output: single video URL."
}
Example
curl -X POST "https://api.apisale.ai/v1/run/alibaba/happy-horse/video-edit" \
-H "Authorization: Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": true,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
}
}'
Related
Authorizations
Key sk-... (native REST) or Bearer sk-... (vendor SDKs)
Body
application/json
Show child attributes
Show child attributes
Example:
{
"prompt": "Recolor the sky to a deep purple sunset.",
"duration": 5,
"resolution": "1080p",
"audio_setting": "auto",
"enable_safety_checker": true,
"video_url": "https://assets.apisale.ai/permanent/official/rehosted/alibaba/happy-horse/video-edit/8e941e9104bf.mp4"
}
Response
201 - application/json
Run accepted
Unique run identifier
Model slug
Available options:
queued, processing, succeeded, failed, timeout, cancelled Show child attributes
Show child attributes
Show child attributes
Show child attributes
