Happy Horse
In this page's examples, {BASE_URL} is https://api.uniall.ai.
Updated: 2026-08-10
Overview
UniAll exposes one stable Happy Horse public model: happy-horse. The current public contract provides Happy Horse 1.0 capabilities. Select the generation mode and output tier with request parameters instead of using separate model names.
| Operation | operation | Required media | Resolution |
|---|---|---|---|
| Text-to-video | text_to_video | None | 720p, 1080p |
| Image-to-video | image_to_video | Exactly one image | 720p, 1080p |
| Multi-reference video | reference_to_video | 1 to 9 images | 720p, 1080p |
| Video editing | edit_video | Exactly one video; up to 5 optional images | 720p, 1080p |
Previous tier-specific model IDs are not supported. Always send model: "happy-horse" together with operation and resolution.
The public HappyHorse 1.0 contract does not offer 480p. A request using that
resolution is rejected before a task is created.
When To Use It
Use happy-horse to:
- generate a video from a text prompt;
- animate one source image while preserving its composition;
- keep characters, products, or styles consistent across multiple reference images;
- edit a source video while preserving or automatically handling its original audio.
Endpoint
Use the primary endpoints for new integrations:
| Purpose | Method | Path |
|---|---|---|
| Create a video task | POST | /v1/videos |
| Query a video task | GET | /v1/videos/{task_id} |
| Retrieve the completed video | GET | /v1/videos/{task_id}/content |
The compatible /v1/videos/generations and /v1/video/generations create and query paths remain available. New clients should use /v1/videos.
Authentication
Authorization: Bearer sk-***
Content-Type: application/json
Quick Request Example
curl -X POST "{BASE_URL}/v1/videos" \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"model": "happy-horse",
"operation": "text_to_video",
"resolution": "1080p",
"prompt": "A white horse runs across a misty grassland at sunrise, cinematic camera movement.",
"duration": 7,
"aspect_ratio": "16:9",
"seed": 12345,
"watermark": false
}'
The create response contains id and the compatible task_id field. Store either value and poll the task endpoint.
{
"id": "task_xxxxxxxxxxxxx",
"task_id": "task_xxxxxxxxxxxxx",
"object": "video.generation.job",
"model": "happy-horse",
"status": "queued",
"progress": 0,
"created_at": 1785801600,
"video_url": null
}
Task Status And Result
After creation, save id or task_id, then poll GET /v1/videos/{task_id} until the task reaches completed or failed. See Video Generation Overview for the shared polling interval, status fields, error contract, result URL, and authenticated download flow.
Billing Notes
- Generation tasks are billed by operation, selected resolution tier, and generated duration.
- Video editing is finally settled using the actual input and output video durations, so the final charge may differ from the initial estimate.
resolutionselects a public service tier, not a guaranteed exact pixel width and height. Inspect the returned media metadata when exact dimensions matter.- Use the current UniAll pricing page and task settlement record as the final price source.
Common Errors
- Using a removed tier-specific model ID instead of
happy-horse. - Omitting the required
operationorresolutionparameter. - Sending
resolution: "480p"; use720por1080p. - Sending
size; Happy Horse usesresolutionand rejectssize. - Sending
durationoraspect_ratioforedit_video. - Sending
aspect_ratioforimage_to_video; this mode follows the source image. - Using private, expired, or otherwise unreachable media URLs.