Skip to main content

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.

OperationoperationRequired mediaResolution
Text-to-videotext_to_videoNone720p, 1080p
Image-to-videoimage_to_videoExactly one image720p, 1080p
Multi-reference videoreference_to_video1 to 9 images720p, 1080p
Video editingedit_videoExactly one video; up to 5 optional images720p, 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:

PurposeMethodPath
Create a video taskPOST/v1/videos
Query a video taskGET/v1/videos/{task_id}
Retrieve the completed videoGET/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.
  • resolution selects 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 operation or resolution parameter.
  • Sending resolution: "480p"; use 720p or 1080p.
  • Sending size; Happy Horse uses resolution and rejects size.
  • Sending duration or aspect_ratio for edit_video.
  • Sending aspect_ratio for image_to_video; this mode follows the source image.
  • Using private, expired, or otherwise unreachable media URLs.