Skip to main content
POST
Create video generation
Video generation is asynchronous. Submit → receive the job id → poll the status endpoint until complete.

Submit a job

Response:
The job handle is id (a UUID), not job_id, and the timestamp is created, not created_at. The duration field is duration; duration_seconds is not recognised and an unrecognised key is ignored rather than refused, so the model’s default duration is rendered and billed instead.

Image-to-video

Pass a reference image via image_url. There is no inline-base64 field on this endpoint:
The URL is fetched anonymously, so it must be publicly reachable, and it is SSRF-checked before anything is billed.

Supported models

Google Veo (3 and 2), OpenAI Sora, xAI (Grok Video), Alibaba Wan. See Models catalog.

Storage

The result.url of a completed job is the upstream provider’s URL and expires with it — usually within an hour. Video jobs write no copy into workspace storage and return no file_id. Download the clip as soon as the job completes, and upload it through POST /v1/files if you need a durable handle.

Authorizations

Authorization
string
header
required

API key in format: Bearer inf_***

Body

application/json
model
string
required

Model ID to use for generation

prompt
string
required

Text prompt describing the video to generate

duration
number

Duration in seconds (model-specific, see /v1/models)

resolution
string

Video resolution (model-specific, see /v1/models)

aspect_ratio
string

Video aspect ratio (model-specific, see /v1/models)

n
integer
default:1

Number of videos to generate

image_url
string

Reference image URL for image-to-video

video_url
string

Reference video URL for video-to-video generation (model-specific)

audio_url
string

Reference audio URL for lipsync generation (model-specific)

person_generation
enum<string>
default:allow_all

Person generation policy (Google Veo models)

Available options:
dont_allow,
allow_adult,
allow_all
fps
enum<integer>

Frame rate of the generated clip. Only 24, 30 and 60 are accepted; anything else is refused with 400. Also refused with 400 for a model served directly by Google (the Veo family), which has no frame-rate parameter — omit it there. Where it is accepted it is a billing dimension: the credit hold and the settle are both priced on it.

Available options:
24,
30,
60
style
string

Free-form style hint. Accepted, persisted with the job and carried into the provider request object — but INERT today: no video provider reads it. The FAL mapper forwards only fields the model's own schema declares (and none declares style), and the direct providers build their request bodies field by field without it. Declared because the endpoint takes it, not because it changes the video.

Response

Video generation job submitted. Poll GET /v1/videos/generations/{jobId} until status === "completed".

id
string

Job ID to poll for status

Example:

"0f9c3b1e-6d2a-4c17-9f83-2b5e7a41c8d0"

status
enum<string>
Available options:
queued,
processing,
completed,
failed
Example:

"queued"

progress
integer

Progress percentage (0-100)

Example:

0

created
integer
Example:

1713204900

model
string
Example:

"veo-3.1-fast"