Submit a video generation task
Creates an async video generation task and returns a task_id immediately (HTTP 202). Poll GET /api/v1/videos/generations/{task_id} until it succeeds. The request body can be provided either flattened ({model, prompt, ...}) or nested ({model, input: {prompt, ...}}); the input object takes precedence when present. callback fields (callBackUrl / callback_url / callbackUrl) are ignored.
Three mutually exclusive input modes:
- text-to-video: prompt only;
- image-to-video (first/last frame): first_frame_url (+ optional last_frame_url);
- omni-reference: reference_image_urls / reference_video_urls / reference_audio_urls. Mixing first/last-frame with any multimodal reference input returns 400 invalid_request_error.
- Тип: stringX
- Request - Id Optional caller request ID echoed back for diagnostics.
Video generation input. Either flattened ({model, prompt, ...}) or nested ({model, input: {...}}). input takes precedence. Exactly one input mode must be used; mixing first/last-frame with multimodal reference inputs is rejected.
- Тип: stringmodelобязательно
Felo-facing model name, e.g. seedance-2.0-mini.
- Тип: string enumaspect
_ratio значения- 16:9
- 9:16
- 1:1
- 4:3
- 3:4
- 21:9
- adaptive
- Тип: integerdurationмин.:4макс.:15
Integer numbers.
- Тип: string Формат: urifirst
_frame _url - Тип: booleangenerate
_audio - Тип: objectinput
Optional nested input object; when present, its fields take precedence over sibling fields.
- aspectТип: string enum
_ratio Output aspect ratio; adaptive follows the input image ratio.
значения- 16:9
- 9:16
- 1:1
- 4:3
- 3:4
- 21:9
- adaptive
- durationТип: integerмин.:4макс.:15
Output duration in seconds.
- firstТип: string Формат: uri
_frame _url First frame image URL (image-to-video mode).
- generateТип: boolean
_audio Whether to generate a synchronized audio track.
- lastТип: string Формат: uri
_frame _url Last frame image URL; must be used together with first_frame_url.
- promptТип: stringмакс. длина:2000
Prompt. Required for text-to-video and omni-reference modes.
- referenceТип: array string[] …3Формат: uri
_audio _urls Omni-reference audio clips.
- referenceТип: array string[] …9Формат: uri
_image _urls Omni-reference images. Mutually exclusive with first/last-frame.
- referenceТип: array string[] …3Формат: uri
_video _urls Omni-reference videos. Mutually exclusive with first/last-frame. Supplying video changes the billing unit price and adds input duration to the token count.
- resolutionТип: string enum
Output resolution. Higher resolution consumes more tokens and costs more.
значения- 480p
- 720p
- 1080p
- 4k
- Тип: string Формат: urilast
_frame _url - Тип: stringpromptмакс. длина:2000
- Тип: array string[] …3Формат: urireference
_audio _urls - Тип: array string[] …9Формат: urireference
_image _urls - Тип: array string[] …3Формат: urireference
_video _urls - Тип: string enumresolutionзначения
- 480p
- 720p
- 1080p
- 4k
- Тип: object · VideoGenerationAccepted202
Task accepted
- enumkindконстанта:videoобязательнозначения
- video
- Тип: array string[]outputsобязательно
Empty until the task succeeds.
- enumstatusконстанта:queuedобязательнозначения
- queued
- Тип: stringtask
_id обязательноTask id to use for polling.
application/json - Тип: object · GenerationError400
Invalid request (unknown model, mixed input modes, invalid fields)
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json - Тип: object · GenerationError401
Invalid or missing Felo API key
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json - Тип: object · GenerationError402
Insufficient balance / billing requirement not met
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json - Тип: object · GenerationError403
Account not permitted (subscription required or user banned). Disabled models are also rejected before upstream calls. Existing accepted requests and tasks continue.
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json - Тип: object · GenerationError429
Request or spending limit reached
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json - Тип: object · GenerationError502
Upstream provider failed
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json - Тип: object · GenerationError503
Generation service or billing service temporarily unavailable
OpenAI-compatible error envelope.
- Тип: objecterror
- messageТип: stringобязательно
- typeТип: string enumобязательнозначения
- invalid
_request _error - server
_error
- codeТип: string
- paramТип: string может быть null
application/json
curl https://openapi.felo.ai/api/v1/videos/generations \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"model": "seedance-2.0-mini",
"prompt": "a cinematic trailer shot, 720p",
"resolution": "720p",
"duration": 5,
"generate_audio": true
}'
{
"task_id": "string",
"status": "queued",
"kind": "video",
"outputs": [
"string"
]
}