ModelSite
Video GenerationHappyHorse

HappyHorse Text-to-Video

POST /api/v1/services/aigc/video-generation/video-synthesis — generate video from a text prompt

The HappyHorse text-to-video model turns a text prompt into physically plausible, motion-coherent video.

Models

ModelNotes
happyhorse-1.1-t2vGeneration 1.1
happyhorse-1.0-t2vGeneration 1.0
happyhorse-1.0-t2v-20260618Generation 1.0, 20260618 snapshot

Create a job

POST/api/v1/services/aigc/video-generation/video-synthesis
curl https://api.modelsite.ai/api/v1/services/aigc/video-generation/video-synthesis \
  -H "Authorization: Bearer $MODELSITE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.1-t2v",
    "input": {
      "prompt": "A golden retriever running on a beach at sunset, waves crashing, cinematic lighting"
    },
    "parameters": {
      "resolution": "720P",
      "ratio": "16:9",
      "duration": 5
    }
  }'

Request body

FieldTypeNotes
modelstring (required)See the table above
input.promptstring (required)The prompt. CJK characters count as 2, everything else as 1, budget 5000 — exceeding it is an error
parametersobject (optional)Generation knobs, below

parameters

ParameterTypeNotes
resolutionstringTier: 480P / 720P / 1080P (default). The sellable tiers follow this model's price configuration; an unpriced tier is refused with InvalidParameter
ratiostringAspect ratio: 16:9 (default) / 9:16 / 1:1 / 4:3 / 3:4 / 4:5 / 5:4 / 9:21 / 21:9
durationintegerSeconds, integer in [3, 15], default 5
watermarkbooleanAdds the "Happy Horse" corner stamp. Defaults to true — pass false explicitly when you don't want it
seedinteger[0, 2147483647]; the same seed does not guarantee identical output
negative_promptstringNegative prompt

Other vendor-native parameters can be written into parameters and pass through verbatim — no wrapping.

Polling and result

GET/api/v1/tasks/{task_id}
curl "https://api.modelsite.ai/api/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $MODELSITE_API_KEY"

Response fields

FieldMeaning
output.task_idJob ID (same value returned at creation)
output.task_statusPENDING queued / RUNNING processing / SUCCEEDED done / FAILED failed
output.video_urlThe generated video URL — only on SUCCEEDED; download promptly
output.code / output.messagePresent only on failure, with the reason
usageUsage stats (duration, resolution tier, …); counted only on success
request_idUnique request ID — include it when reporting issues

Status flow: PENDING → RUNNING → SUCCEEDED / FAILED.

Billing

Billed by actual generated seconds; the resolution tier affects the rate; failed jobs are not billed. Rates on the Models page.

Error handling

Creation-time parameter errors return 4xx with {"code": "...", "message": "..."} (e.g. InvalidParameter). Mid-job failures surface through the poll response's output.code / output.message. General error codes: Errors.

On this page