happyhorse-1.0-official
Happy Horse 1.0 Official Channel — direct first-party Aliyun Model Studio routing with ReAPI's URL-only media contract.
Happy Horse 1.0 Official Channel — direct first-party routing,
distinct from the standard happyhorse-1.0
channel. It uses the official Aliyun Model Studio SKUs behind
one ReAPI model id and keeps ReAPI's URL-only media contract.
Official channel, ReAPI boundary. The upstream provider is Aliyun
Model Studio first-party. Media inputs must still be public http(s) URLs;
base64/data URI media is not accepted by ReAPI even where upstream docs show
base64 examples.
Watermark policy is also a ReAPI override: Aliyun's official default is
true, but ReAPI defaults watermark to false. Send "watermark": true
if you want the upstream watermark.
Quick example
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.0-official",
"prompt": "A coastal road at sunset, slow-motion camera push-in, cinematic feel",
"resolution": "1080P",
"size": "4:5",
"duration": 5,
"seed": 42
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={
"Authorization": "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
json={
"model": "happyhorse-1.0-official",
"prompt": "A coastal road at sunset, slow-motion camera push-in",
"resolution": "1080P",
"size": "4:5",
"duration": 5,
"seed": 42,
},
timeout=30,
)
print(resp.json())const r = await fetch("https://reapi.ai/api/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "happyhorse-1.0-official",
prompt: "A coastal road at sunset, slow-motion camera push-in",
resolution: "1080P",
size: "4:5",
duration: 5,
seed: 42,
}),
});
console.log(await r.json());package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "happyhorse-1.0-official",
"prompt": "A coastal road at sunset, slow-motion camera push-in",
"resolution": "1080P",
"size": "4:5",
"duration": 5,
"seed": 42,
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/videos/generations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer rk_live_xxx")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}Request surface
The public endpoint and async response envelope are the same as the standard channel:
POST /api/v1/videos/generationsOne model id auto-routes by request shape:
| Shape | Official upstream SKU |
|---|---|
prompt only | happyhorse-1.0-t2v |
first_frame_image (+ optional prompt) | happyhorse-1.0-i2v |
image_urls 1-9 + prompt | happyhorse-1.0-r2v |
video_url (+ optional image_urls 0-5) + prompt | happyhorse-1.0-video-edit |
first_frame_image, image_urls, and video_url are mutually exclusive
except for the legal EDIT combination: video_url + image_urls.
Official-channel constraints
| Field | Official channel behavior |
|---|---|
model | Must be "happyhorse-1.0-official" |
prompt | Required for T2V / R2V / EDIT, optional for I2V. Aliyun truncates over-length prompt text upstream; ReAPI does not reject official-channel prompts at the standard-channel 2500-character cap. |
first_frame_image | Public http(s) URL only. Base64/data URI is rejected by ReAPI. |
image_urls | Public http(s) URLs only. R2V accepts 1-9 images; EDIT accepts 0-5 reference images. |
video_url | Public http(s) URL only. EDIT source video must be 3-60 seconds, long side ≤2160 px, short side ≥320 px, and aspect ratio between 1:2.5 and 2.5:1. Aliyun also enforces file size ≤100 MB and fps >8. |
resolution | "720P" or "1080P"; omitted lets upstream apply its default. |
size | T2V/R2V ratio: "16:9", "9:16", "1:1", "4:3", "3:4", "4:5", "5:4". Ignored for I2V and EDIT because output shape follows the source media. |
duration | 3-15 seconds for T2V/I2V/R2V. Ignored for EDIT because output length follows the source video. |
watermark | ReAPI default is false even though Aliyun's official default is true. Explicit true / false is honored. |
seed | Integer from 0 to 2147483647. |
audio_setting | EDIT only: "auto" or "origin". |
Differences from happyhorse-1.0
| Aspect | happyhorse-1.0 | happyhorse-1.0-official |
|---|---|---|
| Upstream channel | Standard | Aliyun Model Studio official |
Wire model value | "happyhorse-1.0" | "happyhorse-1.0-official" |
| T2V/R2V ratios | 16:9, 9:16, 1:1, 4:3, 3:4 | Adds 4:5 and 5:4 |
| Prompt cap | ReAPI rejects above 2500 chars | Aliyun truncation semantics; no local 2500-char reject |
| EDIT video dimensions | Standard channel validation rules | Official Aliyun validation rules |
| Default watermark | ReAPI default false | ReAPI default false (intentional override from Aliyun default true) |
| Per-second rate | Baseline | 10% off the baseline |
| Validation error prefix | happyhorse: | happyhorse-official: |
Pricing
Per-second × resolution. 10% off the standard channel at every supported resolution. See current 720P / 1080P / 4K rates on the Happy Horse model page.
Bill formula (1 credit = $0.001):
| Mode | Billable seconds |
|---|---|
| T2V / I2V / R2V | duration you sent (default 5) |
| EDIT | ceil(probed_source_seconds) + min(ceil(probed_source_seconds), 15) — vendor processes the source AND produces a capped output; both sides are billable. Failed probe → 400 PRICING_UNAVAILABLE, no charge. |
Final bill: ceil(per_second_usd_after_discount × billable_seconds × 1000) credits.
Failed jobs refund automatically.
Examples
| Source video | Mode | Billable seconds |
|---|---|---|
| — | T2V, duration=5 | 5 |
| — | T2V, duration=10 | 10 |
| 5s clip | EDIT | 5 + min(5, 15) = 10 |
| 8.3s clip | EDIT | 9 + min(9, 15) = 18 |
| 60s clip | EDIT | 60 + min(60, 15) = 75 |
| 20s clip | EDIT | 20 + min(20, 15) = 35 |
Apply ceil(per_second_usd_after_discount × billable_seconds × 1000) for
the credit charge.
Validation errors
The response envelope and numeric error-code system match the standard
channel, but official-channel validation follows the official Aliyun rules
listed above. Error messages from this channel use the
happyhorse-official: prefix.
Pattern-match on the numeric code, not the message string.
When to pick which channel
| Need | Channel |
|---|---|
| Lowest unit price | happyhorse-1.0-official |
| Official Aliyun Model Studio route | happyhorse-1.0-official |
size values 4:5 or 5:4 | happyhorse-1.0-official |
| Existing integration with no migration | happyhorse-1.0 |
| Standard channel route / existing constraints | happyhorse-1.0 |
Switching channels = changing the model string in your request body.
The response envelope and polling flow are shared; provider-specific
validation and pricing differ as documented above.