Skip to navigation

BeatAPI Video API

Video API

Create one asynchronous video generation task with a stable BeatAPI model ID.

ModelInput modesRequired fieldsMain controls
minimax-h3Original ID, retains Fast contract and pricesmodel, prompt4–15s, up to 2K
minimax-h3-fastExplicit Fast alias of minimax-h3model, promptSame input limits and prices as the original ID
minimax-h3-normalSlower, half-price text, frames, or visual referencesmodel, prompt5–15s; 480p/768p/1080p; native audio, no audio input
grok-imagine-video-1.5Text, first frame, up to seven reference imagesmodel, prompt1–15s, 480p/720p/1080p; 1080p accepts at most one image
seedance-2Text, first/last frames, multimodal referencesmodel, prompt4–15s, up to 4K, generated audio
seedance-2-fastText, first/last frames, multimodal referencesmodel, prompt4–15s, 480p/720p, generated audio
seedance-2-miniText, first/last frames, multimodal referencesmodel, prompt4–15s, 480p/720p, no generate_audio field
veo-3.1Text, first/last frames, reference imagesmodel, promptNo duration field; quality Quality/Fast/Lite; 720p/1080p/4K
seedance-2.5Text, first/last frames, larger multimodal reference setsmodel, prompt4–30s, 480p/720p/1080p, generated audio and seed
kling-v3Text, first/last frames, multi-shot, reusable elementsmodel, prompt3–15s, std (720p) or pro (1080p), optional sound
kling-v4Text, frames in time order, reference images, videos and voices, named elementsmodel, prompt3–30s, 720p/1080p, audio always generated
kling-2.6-motion-controlOne uploaded character image + one uploaded motion videomodel, images, reference_videos3–30s motion video, 720p/1080p, billed per second
kling-3-motion-controlMotion transfer with orientation and background controlsmodel, images, reference_videos3–30s motion video, 720p/1080p, billed per second
wan-3.0Text, first frame, reference videos and audiomodel, prompt2–30s, 720p/1080p
wan-3.0-primeSame inputs as Wan 3.0, on a faster queuemodel, prompt2–30s, 720p/1080p, same price as Wan 3.0
happyhorse-1.0Image to video only, up to nine source anglesmodel, prompt, images3–15s, 720p/1080p
happyhorse-1.1Same contract as 1.0 at a lower per-second ratemodel, prompt, images3–15s, 720p/1080p
minimax-h3-maxText, first frame, first and last framesmodel, promptFrom 5s, 480P/768P, seed
minimax-h3-max-turboSame contract as H3 Maxmodel, promptFrom 5s, 480P/768P, half the per-second rate

Open the matching model page for every field, default, enum, combination rule, request example, response, and error behavior.

List available models

GET /v1/media/models

ParameterLocationTypeRequiredAllowed values
media_typeQuerystringNoimage, video

This public endpoint does not require authentication.

curl "https://api.beatapi.io/v1/media/models?media_type=video"
{
"data": {
"object": "list",
"data": [
{
"id": "minimax-h3",
"object": "generation_model",
"name": "MiniMax H3",
"media_type": "video",
"input_modes": ["text", "frames", "reference"]
}
]
}
}
FieldTypeMeaning
idstringStable public model alias
objectstringgeneration_model
namestringDisplay name
media_typestringimage or video
input_modesstring[]Any of text, image, frames, reference

Internal provider routing is not part of the public contract.

Shared create contract

POST /v1/videos/tasks

HeaderTypeRequiredRules
AuthorizationstringYesBearer <BEATAPI_API_KEY>
Content-TypestringYesapplication/json
Idempotency-KeystringNo, recommendedUp to 255 characters; one key per logical create

The body must match exactly one model schema. model is the discriminator; unknown fields are rejected.

curl https://api.beatapi.io/v1/videos/tasks \
-X POST \
-H "Authorization: Bearer $BEATAPI_API_KEY" \
-H "Idempotency-Key: video-seedance-2-5-001" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"prompt": "A cinematic tracking shot through a rain-lit night market.",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p"
}'

A valid request returns 201 Created with data.id, task_kind="video", the selected model, status="queued", usage metrics, and request_id. Poll GET /v1/tasks/{task_id} every 5–10 seconds until succeeded or failed; successful video is in data.output.media[] and data.output.r2_url.

An exact idempotent replay returns the accepted task. Reusing a key with a different body returns 409 idempotency_conflict.

Shared errors

HTTPCommon codeClient action
400bad_requestFix fields, values, combinations, counts, or media URLs
400content_policy_violationChange the prompt or input; do not resend unchanged
401missing_api_key / invalid_api_keySend the Bearer key, or replace a wrong, expired, disabled, or exhausted one
402insufficient_creditsTop up before creating a new task
403forbiddenNot allowed for this key or account — for example a model not available on free credit
409idempotency_conflictReuse the key only with the exact same body
429rate_limit_exceededHonor Retry-After
500internal_errorRetry once with backoff
503processing_unavailable / processing_timeout / processing_failed / result_transfer_failedRetry with backoff; nothing was charged

Error responses include error.code, an English error.message, error.retryable, error.request_id, and error.retry_after_seconds on a 429. A task that fails after it was accepted is still read with 200: see data.error_code and Errors for every code and retry rule. The per-model pages below are the production request contracts.