
How to Use HappyHorse 1.1 API: Complete EvoLink Guide for Video Generation

How to Use HappyHorse 1.1 API on EvoLink
If you want to use HappyHorse 1.1 through EvoLink, the practical workflow is:
- Choose the HappyHorse 1.1 model ID that matches your input type.
- Send a video generation task to
POST /v1/videos/generations. - Store the returned task ID.
- Poll
GET /v1/tasks/{task_id}or configurecallback_url. - Download or move the generated video result before your application depends on it.
Quick answer
HappyHorse 1.1 currently has three EvoLink routes:
| Use case | Model ID | Best when |
|---|---|---|
| Text-to-video | happyhorse-1.1-text-to-video | Your app starts from a prompt only |
| Image-to-video | happyhorse-1.1-image-to-video | Your app already has one first-frame image |
| Reference-to-video | happyhorse-1.1-reference-to-video | Your app needs 1-9 ordered reference images |
callback_url, and per-second video billing.Do not mix HappyHorse 1.1 with older HappyHorse 1.0 routes. The current HappyHorse 1.1 integration surface on EvoLink is the three-route setup above.
Table of contents
- Confirmed facts
- Choose the right route
- Prerequisites
- Basic request flow
- Text-to-video example
- Image-to-video example
- Reference-to-video example
- Parameters to plan before production
- Async status and callback_url
- Cost planning
- Production rollout checklist
- Troubleshooting
- FAQ
Confirmed facts
| Item | HappyHorse 1.1 on EvoLink |
|---|---|
| API availability | Live on EvoLink |
| Main endpoint | POST /v1/videos/generations |
| Task status endpoint | GET /v1/tasks/{task_id} |
| Delivery model | Async task creation and status retrieval |
| Callback support | callback_url is available in the create request |
| Output resolutions | 720p and 1080p |
| Duration range | Integer seconds from 3 to 15 |
| Generated video links | Valid for 24 hours; save or move completed assets promptly |
| Billing shape | Per generated second, affected by resolution and duration |
| Current pricing source | HappyHorse 1.1 pricing table |
This matters because video generation should be treated as an async production job, not a synchronous API call that blocks a web request.
Choose the right route
The biggest integration mistake is choosing a route by name instead of by input asset. Start from what your workflow already has.
| Input asset | Recommended route | Why |
|---|---|---|
| A prompt and no images | happyhorse-1.1-text-to-video | Keeps generation prompt-first and uses explicit aspect ratio control |
| One product image, character image, or scene image | happyhorse-1.1-image-to-video | Uses the image as the first frame and derives aspect ratio from the source image |
| Multiple characters, objects, or style references | happyhorse-1.1-reference-to-video | Lets the prompt refer to ordered images with character1, character2, and similar labels |
Use text-to-video for ideation, image-to-video for asset animation, and reference-to-video when consistency across multiple input images matters.
Prerequisites
Before you make the first request, prepare these items:
| Requirement | What to prepare |
|---|---|
| EvoLink API key | Create an API key from your EvoLink account |
| Public image URLs | Required for image-to-video and reference-to-video |
| Model ID | Pick one of the three HappyHorse 1.1 model IDs |
| Storage plan | Decide where completed video files should be saved |
| Callback endpoint | Optional, but recommended for production queues |
| Cost guardrails | Decide default duration, resolution, and retry limits before batch jobs |
For image inputs, use publicly accessible HTTP or HTTPS URLs. Private intranet links, authenticated object storage URLs, and local files are not valid production inputs for the API.
Basic request flow
HappyHorse 1.1 follows EvoLink's video task pattern:
| Step | API action | What your app should store |
|---|---|---|
| Create task | POST /v1/videos/generations | Task ID, model ID, user ID, requested duration, requested quality |
| Track task | GET /v1/tasks/{task_id} | Status, progress, output link, usage data |
| Complete task | Polling or callback_url | Final video asset, final status, billing metadata |
| Persist result | Your own storage layer | Stable URL for your product, job history, audit trail |
model value and passing route-specific inputs.Text-to-video example
model and prompt.curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <EVOLINK_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "happyhorse-1.1-text-to-video",
"prompt": "A cinematic product shot of a transparent electric scooter moving through a clean studio space, slow dolly camera, soft reflections",
"quality": "720p",
"aspect_ratio": "16:9",
"duration": 5,
"callback_url": "https://your-domain.com/webhooks/video-task-completed"
}'Text-to-video planning notes
| Parameter | Planning advice |
|---|---|
prompt | Describe subject, scene, camera movement, motion, lighting, and style |
quality | Start with 720p; move to 1080p after prompt quality is stable |
aspect_ratio | Choose the final channel early: 16:9, 9:16, 1:1, and other supported ratios |
duration | Start with 3-5 seconds for tests before longer generations |
seed | Use a fixed seed only when you need reproducible prompt iterations |
Shot 1 [0~3s] wide angle...; Shot 2 [3~6s] medium shot....Image-to-video example
model and image_urls.curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <EVOLINK_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "happyhorse-1.1-image-to-video",
"image_urls": ["https://cdn.example.com/product-hero.png"],
"prompt": "Animate the product with a smooth camera orbit and subtle studio lighting movement",
"quality": "720p",
"duration": 5,
"callback_url": "https://your-domain.com/webhooks/video-task-completed"
}'Image-to-video input rules
| Rule | Requirement |
|---|---|
| Number of images | Exactly one first-frame image |
| Supported formats | JPEG, JPG, PNG, WEBP |
| Minimum image size | Width and height should be at least 300 px |
| Aspect ratio | The image should be within the supported source-image ratio range |
| File size | Keep each image at or below 10MB |
| URL access | The URL must be publicly accessible |
aspect_ratio field.Reference-to-video example
model, prompt, and image_urls.curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <EVOLINK_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"model": "happyhorse-1.1-reference-to-video",
"prompt": "character1 walks into the scene, picks up the object shown as character2, and places it on the table beside character3",
"image_urls": [
"https://cdn.example.com/person.png",
"https://cdn.example.com/object.png",
"https://cdn.example.com/scene.png"
],
"quality": "720p",
"aspect_ratio": "16:9",
"duration": 5,
"callback_url": "https://your-domain.com/webhooks/video-task-completed"
}'Reference-to-video input rules
| Rule | Requirement |
|---|---|
| Number of images | 1-9 reference images |
| Prompt convention | Use character1, character2, character3, and so on |
| Image order | The first URL maps to character1, the second to character2 |
| Supported formats | JPEG, JPG, PNG, WEBP |
| Recommended quality | Use clear images with short edge at least 400 px and short-edge / long-edge ratio at least 0.4 |
| File size | Keep each image at or below 10MB |
| URL access | Use public HTTP or HTTPS URLs |
character1 / character2 references can create ambiguity. If your app collects references from users, store the user-visible reference order and the exact image_urls array together.Parameters to plan before production
The exact API reference should remain your schema authority, but most production issues come from a small set of decisions.
| Parameter | Applies to | Production decision |
|---|---|---|
model | All routes | Map each product workflow to one model ID |
prompt | Text-to-video, reference-to-video, optional image-to-video | Define prompt templates and validation rules |
image_urls | Image-to-video, reference-to-video | Validate URL access, format, size, and image count before calling the API |
quality | All routes | Use 720p for testing; reserve 1080p for approved outputs |
aspect_ratio | Text-to-video and reference-to-video | Match the distribution channel before generation |
duration | All routes | Use short tests first; longer duration directly affects cost |
seed | All routes | Store seeds only for reproducible iteration workflows |
callback_url | All routes | Prefer callbacks for production queues and background jobs |
Keep a server-side allowlist for model IDs. Do not let client input freely choose arbitrary model names.
Async status and callback_url
After creating a task, your application receives a task ID. Store it immediately and query status:
curl --request GET \
--url https://api.evolink.ai/v1/tasks/<TASK_ID> \
--header 'Authorization: Bearer <EVOLINK_API_KEY>'Task responses can include status, progress, model, task information, result details, and usage information. Treat the task ID as the durable link between your user-facing job and the EvoLink generation job.

Polling vs callback_url
| Approach | Use when | Tradeoff |
|---|---|---|
| Polling | You are testing locally or building a small admin workflow | Simple, but can create unnecessary queue load |
callback_url | You are running user-facing generation at scale | Cleaner production flow, but requires a secure HTTPS endpoint |
callback_url must use HTTPS and should not point to private IP ranges. Your handler should be idempotent because retries can happen after failed callback delivery.Cost planning
For engineering planning, focus on the cost drivers:
| Cost driver | Why it matters | Practical guardrail |
|---|---|---|
| Duration | More generated seconds increase cost | Default to 3-5 second tests |
| Resolution | Higher resolution affects billing | Approve prompt quality at 720p first |
| Retry behavior | Blind retries can multiply spend | Retry only known transient failures |
| Route selection | Reference workflows can be more operationally complex | Use image-to-video when one first frame is enough |
| Batch size | Batch jobs can hide cost spikes | Add per-user and per-job spending limits |
For production, log requested duration, actual task status, model ID, quality, and user/account ID. That makes billing review and incident debugging much easier.
Production rollout checklist
Use this checklist before routing real users to HappyHorse 1.1:
| Area | Checklist |
|---|---|
| Model routing | Map product actions to the correct HappyHorse 1.1 model ID |
| Input validation | Validate prompt length, image count, public URL access, file format, and image size |
| Queue design | Treat every video job as async and store task IDs |
| Callback security | Use HTTPS, verify payload shape, and make handlers idempotent |
| Cost controls | Set duration defaults, quality defaults, and per-account limits |
| Asset storage | Move completed videos into your own storage within the 24-hour result-link window |
| Fallback model | Keep another EvoLink video model available for production variance |
| Monitoring | Track task failure rate, average completion time, retry rate, and spend |
This is where EvoLink's unified gateway matters: once your app uses a clean routing layer, switching between HappyHorse, Seedance, Kling, Sora, or another video model is mostly a model selection decision rather than a new vendor integration.
Troubleshooting
Most HappyHorse 1.1 integration issues come from model ID mismatch, invalid image URLs, unsupported route assumptions, or async handling.
| Symptom | Likely cause | Fix |
|---|---|---|
model_access_denied | API key does not have access to the selected model | Check account access and use the model ID shown on the HappyHorse 1.1 page |
| Request fails for image-to-video | Missing image_urls or image URL is not public | Pass one public image URL |
| Reference output confuses characters | Prompt does not use character1, character2, etc. | Match prompt references to the image array order |
| Aspect ratio does not behave as expected | Using image-to-video and expecting explicit aspect control | Adjust the source image ratio instead |
| Cost is higher than expected | Duration, resolution, retries, or batch size increased | Start with short 720p tests and add spend limits |
| User request times out | App is treating video generation as synchronous | Store task ID and use polling or callback delivery |
If a request example here ever conflicts with the API reference, follow the API reference.
Example implementation pattern
For most products, use a small routing layer instead of hardcoding HappyHorse in every feature.
type HappyHorseRoute =
| 'text-to-video'
| 'image-to-video'
| 'reference-to-video'
const happyHorseModelIdByRoute: Record<HappyHorseRoute, string> = {
'text-to-video': 'happyhorse-1.1-text-to-video',
'image-to-video': 'happyhorse-1.1-image-to-video',
'reference-to-video': 'happyhorse-1.1-reference-to-video',
}The routing layer should sit behind product logic. Your UI can ask "Do you have a prompt, one first frame, or multiple references?" while your backend turns that answer into a model ID and validated request body.
When to use another EvoLink video model instead
HappyHorse 1.1 is useful for text, first-frame, and image-reference video workflows. It is not the only video route on EvoLink.
| Need | Consider |
|---|---|
| More reference types such as video or audio references | Seedance 2.0 |
| Repeatable short-form prompt production with a mature workflow | Kling 3.0 |
| A different creative style or model behavior | Compare routes in the EvoLink model catalog |
FAQ
Which endpoint do I use for HappyHorse 1.1?
POST /v1/videos/generations, with the HappyHorse 1.1 model ID that matches your input type.What are the HappyHorse 1.1 model IDs?
happyhorse-1.1-text-to-video, happyhorse-1.1-image-to-video, and happyhorse-1.1-reference-to-video.Which model ID should I use for prompt-only generation?
happyhorse-1.1-text-to-video when your workflow starts from a text prompt only.Which model ID should I use for first-frame animation?
happyhorse-1.1-image-to-video when you have one source image that should become the first frame of the video.Which model ID should I use for multiple reference images?
happyhorse-1.1-reference-to-video when you have 1-9 ordered reference images and your prompt needs to refer to them as character1, character2, and so on.Does image-to-video support aspect_ratio?
The image-to-video route derives output aspect ratio from the source image. For explicit aspect ratio planning, use text-to-video or reference-to-video.
Can I use callback_url?
callback_url for task completion callbacks. Use HTTPS and build the callback handler to be idempotent.Where do I find current pricing?
Can I use the same EvoLink API key?
Yes. HappyHorse 1.1 uses the same EvoLink API key and billing system as the other EvoLink routes available to your account.
Does HappyHorse 1.1 support video-edit?
The current HappyHorse 1.1 page and API references expose text-to-video, image-to-video, and reference-to-video. Do not use a HappyHorse 1.0 video-edit route as if it were a HappyHorse 1.1 route.


