xAI's Grok Imagine video model: text-to-video and image-to-video under one model name, with a native synced audio track (dialogue / sound effects / ambience), any duration from 1 to 15 seconds, three per-second pricing tiers (480p / 720p / 1080p), and watermark-free output. Generation is fast — a 4-second clip comes back in roughly 30-70 seconds in our production tests. It runs on the same unified video endpoint as VEO, Kling and Seedance on apimodels.app, so switching models is a one-string change and one API key covers everything.
| Resolution | Rate | 4s | 8s | 15s |
|---|---|---|---|---|
| 480p | $0.0294/s | $0.12 | $0.24 | $0.44 |
| 720p | $0.0529/s | $0.21 | $0.42 | $0.79 |
| 1080p | $0.0882/s | $0.35 | $0.71 | $1.32 |
Cost = rate × duration in seconds. Text-to-video and image-to-video cost the same; reference images add nothing. Failed tasks are not billed.
POST /api/v1/video/generations — async: create, then poll the same endpoint for the result.
# Step 1: Create task (text-to-video; add "images" for image-to-video)
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"prompt": "A calm coastal shoreline at sunset, camera slowly pushing forward",
"resolution": "480p",
"duration": 4,
"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-imagine-video-1.5 |
| prompt | No | string | Text description (optional when reference images are given — send at least one of prompt / images) |
| images | No | string[] | Reference images, up to 7; http(s) URLs or base64 / data URLs both work |
| resolution | No | string | "480p" (default), "720p", "1080p" |
| duration | No | number | 1-15 seconds, default 4 |
| aspect_ratio | No | string | "16:9" (default), "9:16", "1:1", "3:2", "2:3" |
| callback_url | No | string | Webhook URL called when the 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 MP4 URL (H.264 video + AAC audio) in data.resultUrls[0], and failed puts the reason in data.failMsg. To skip polling, 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-imagine-video-1.5", a prompt and/or reference images, then poll the same endpoint with the returned task_id until data.state is "completed" — data.resultUrls[0] is the MP4 (H.264 video + AAC audio). 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.
It is billed per second by resolution: 480p at $0.0294/s, 720p at $0.0529/s, 1080p at $0.0882/s — so a 4-second 480p clip is about $0.12 and a 15-second 1080p clip about $1.32. Text-to-video and image-to-video cost the same; reference images add nothing. Failed tasks are not billed.
It produces a native synced audio track (dialogue, sound effects, ambience) alongside the frames — the MP4 you download already carries H.264 video plus AAC audio, no separate dubbing step. Output is watermark-free; we frame-checked both text-to-video and image-to-video results in production before listing it.