High-quality video generation by xAI, with natural, fluid motion. It runs on the same unified video endpoint as everything else on apimodels.app: one POST creates the task, then you poll that same endpoint for the result — identical to VEO, Kling and Seedance, so switching models is a one-string change. Two public model names: grok-video-3 is priced per second — $0.04/s at 480p / 720p and $0.12/s at 1080p — for 6 / 10 / 15-second output, and grok-video-3-10s is billed per clip on flat tiers — 720p $0.30 / $0.50 / $0.70 and 1080p $0.35 / $0.65 / $2.00 for 6 / 10 / 15 seconds. Both support image-to-video.
| Model | model | Duration | Price | Notes |
|---|---|---|---|---|
| Grok Video 3 | grok-video-3 | 6 / 10 / 15s | $0.24-$0.60 | Image-to-video, $0.04/s ($0.12/s at 1080p) |
| Grok Video 3 (10s) | grok-video-3-10s | 6 / 10 / 15s | $0.30-$2.00 | Image-to-video, flat per clip: 720p $0.30 / $0.50 / $0.70, 1080p $0.35 / $0.65 / $2.00 |
Both names are the same model and differ only in billing shape: grok-video-3 is per-second ($0.04/s at 480p / 720p, $0.12/s at 1080p), grok-video-3-10s is a flat per-clip price on six resolution × length tiers (10 seconds by default). Both do 1080p and output quality is identical, so take whichever is cheaper for your shape: **for 1080p at 6s or 10s use grok-video-3-10s** ($0.35 / $0.65 vs $0.72 / $1.20 per-second), and **for 1080p at 15s use grok-video-3** ($1.80 vs $2.00). 480p is only on grok-video-3, and 720p is cheaper on the per-second one.
POST /api/v1/video/generations — async: create, then poll the same endpoint for the result.
# Step 1: Create task
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-video-3",
"prompt": "A cat playing piano in a jazz club, cinematic lighting",
"aspect_ratio": "16:9"
}'
# Step 2: Poll status
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | grok-video-3 / grok-video-3-10s |
| prompt | Yes | string | Text description of the video to generate |
| aspect_ratio | No | string | "16:9" (default), "1:1", "9:16", "2:3", "3:2" |
| duration | No | number | 6, 10 or 15 (default 6 for grok-video-3, 10 for grok-video-3-10s) |
| size | No | string | grok-video-3: "480P" or "720P" (default). grok-video-3-10s: "720P" (default) or "1080P" |
| images | No | string[] | Array of reference image URLs, up to 7 — passing any turns the call into image-to-video. image_urls and image are accepted as aliases. |
| callback_url | No | string | Webhook URL called when task completes |
The create call returns data.taskId right away and the video renders in the background. GET the same endpoint with that task_id and read data.state: pending means still running, completed puts the video URL in data.resultUrls[0], and failed puts the reason in data.failMsg. To skip polling entirely, pass callback_url and we POST you when the task finishes.
Yes. On apimodels.app you POST to /api/v1/video/generations with model "grok-video-3" (or "grok-video-3-10s"), a prompt and an optional aspect_ratio, then poll the same endpoint with the returned task_id until data.state is "completed" — data.resultUrls[0] is the video. It is the same request shape as VEO, Kling and Seedance here, so switching models is a one-string change, and one API key covers all of them.
grok-video-3 is billed per second at $0.04/s, so a 6-second clip is $0.24, 10 seconds is $0.40 and 15 seconds is $0.60. The separate grok-video-3-10s model is billed per clip on flat tiers: 720p $0.30 / $0.50 / $0.70 and 1080p $0.35 / $0.65 / $2.00 for 6 / 10 / 15 seconds. Failed tasks are not billed — you are only charged on success.
Same model, different billing shape. grok-video-3 gives you 6, 10 or 15-second output billed per second at $0.04/s ($0.24-$0.60). grok-video-3-10s is billed per clip on six flat tiers — 720p $0.30 / $0.50 / $0.70 and 1080p $0.35 / $0.65 / $2.00 for 6 / 10 / 15 seconds (10 by default) — which is easier to budget for batch jobs, and it is the only one of the two that outputs real 1080p. At 720p / 10s grok-video-3 works out to $0.40 and grok-video-3-10s to $0.50, so pick grok-video-3-10s for a fixed per-clip price or for 1080p, and grok-video-3 for 480p or per-second billing.
Yes — both grok-video-3 and grok-video-3-10s support image-to-video as well as plain text-to-video, through the same /api/v1/video/generations endpoint. You can try the image workflow directly on the model pages at apimodels.app/models/grok-video-3 and /models/grok-video-3-10s.
aspect_ratio accepts "16:9" (the default), "1:1", "9:16", "2:3" and "3:2", so landscape, portrait and square all come from one endpoint — no model switching for social formats. A 10-second clip typically comes back in about 60 seconds and shorter ones in around 30, so poll every 5-10 seconds, or pass callback_url and let us POST you when the task finishes.
Result videos are hosted for 7 days and then deleted automatically, so download or re-host anything you need to keep. The URL comes back in data.resultUrls[0] once data.state is "completed"; if the task fails, data.failMsg carries the reason and nothing is charged.