ApiframeDocs
Video Generation

Grok Video 1.5

Animate a still image into video with xAI's Grok Video 1.5 model.

POST /v2/videos/generatemodel: "grok-imagine-video-1.5"

xAI's latest Grok video model. It is image-to-video only: supply a source image and describe the motion. Compared with Grok Video, 1.5 delivers better motion, physics, and temporal consistency. Resolution is fixed at 720p.

See Video Generation overview for common request fields, response format, and error codes.

Model-specific parameters

ParameterTypeRequiredDefaultDescription
grokImagineVideo15Params.imagestringYesURL of the still image to animate. Supports jpg, jpeg, png, webp
grokImagineVideo15Params.durationnumberNo6Video duration in seconds: 6, 10, or 15
grokImagineVideo15Params.aspect_ratiostringNo"auto"Aspect ratio: "auto", "1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3". "auto" keeps the source image's native ratio

Credit cost

VariantCredits
6s60
10s100
15s150

Example result

Once the job is COMPLETED, the result object on GET /v2/jobs/:id looks like:

{
  "videoUrl": "https://cdn2.apiframe.ai/videos/b2c3d4e5-f6a7-8901-bcde-f23456789012.mp4"
}

See Result format for field details.

Code examples

curl -X POST https://api.apiframe.ai/v2/videos/generate \
  -H "X-API-Key: afk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "slow cinematic push-in as embers drift across the scene",
    "model": "grok-imagine-video-1.5",
    "grokImagineVideo15Params": {
      "image": "https://example.com/still.jpg",
      "duration": 10
    }
  }'
import requests

response = requests.post(
    "https://api.apiframe.ai/v2/videos/generate",
    headers={
        "X-API-Key": "afk_your_api_key_here",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "slow cinematic push-in as embers drift across the scene",
        "model": "grok-imagine-video-1.5",
        "grokImagineVideo15Params": {
            "image": "https://example.com/still.jpg",
            "duration": 10,
        },
    },
)
print(response.json())
const response = await fetch("https://api.apiframe.ai/v2/videos/generate", {
  method: "POST",
  headers: {
    "X-API-Key": "afk_your_api_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    prompt: "slow cinematic push-in as embers drift across the scene",
    model: "grok-imagine-video-1.5",
    grokImagineVideo15Params: {
      image: "https://example.com/still.jpg",
      duration: 10,
    },
  }),
});
console.log(await response.json());
body := `{
  "prompt": "slow cinematic push-in as embers drift across the scene",
  "model": "grok-imagine-video-1.5",
  "grokImagineVideo15Params": {
    "image": "https://example.com/still.jpg",
    "duration": 10
  }
}`
req, _ := http.NewRequest("POST", "https://api.apiframe.ai/v2/videos/generate",
    strings.NewReader(body))
req.Header.Set("X-API-Key", "afk_your_api_key_here")
req.Header.Set("Content-Type", "application/json")

resp, err := http.DefaultClient.Do(req)

Choosing between 1.5 and the base model

Grok VideoGrok Video 1.5
Text-to-videoYesNo — image required
Image-to-videoYes (up to 7 reference images)Yes (one source image)
Motion and physicsGoodBest in the family
Cost (6s)54 credits84 credits

Use the base model for text-only prompts and cheaper drafts; use 1.5 when you have a hero still and want the highest-fidelity motion.

Try it

POST/v2/videos/generateTry it

On this page