
A single product photo, headshot, or landscape still can become a usable short-form video clip without touching a separate video-generation account. Grok Imagine 1.5's image-to-video endpoint takes one image URL, an optional prompt describing the motion, and a duration — then hands back a rendered .mp4 through hiapi's async task API.
This walkthrough uses one source image and two different prompts to show how much the wording changes the result, then breaks down the actual request schema, pricing, and a copy-pasteable code sample.

Both clips below start from this same still. Nothing about the base image changes between requests — only the prompt field does.
Prompt: "Slow push-in toward the subject, soft ambient light, cinematic teaser pacing." Duration: 4.
Prompt: "Camera slowly orbits around the subject, revealing the scene from a new angle." Duration: 8.
Same still, same model, two completely different camera moves — the prompt is doing almost all of the work here, since the request has no dedicated motion-strength or camera-path parameter.
Full model docs and live pricing live on the Grok Imagine 1.5 Image to Video model page. The request body is intentionally small:
{
"model": "grok-imagine-1.5/image-to-video",
"input": {
"image_urls": ["https://your-public-host.com/source.jpg"],
"prompt": "Slow push-in toward the subject, soft ambient light, cinematic teaser pacing.",
"duration": 4
}
}
Three things worth knowing before you call it:
image_urls must be public HTTP(S) URLs. The model fetches the image itself — you can't upload raw bytes in the request body. If your source image only exists locally, upload it to any public bucket first.duration is an integer from 1 to 15 seconds. There's no aspect_ratio, resolution, or motion-strength field — output framing follows the source image, and resolution is picked by pricing tier (480p vs 720p) rather than a request parameter.prompt is optional but does most of the creative work, since there's nothing else to steer the camera with.Like every video and image model on hiapi, this runs through the unified async task API rather than a synchronous endpoint — generation takes real time, so you submit a task, poll for completion, then download the result before its link expires.
# 1. Submit the task
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-1.5/image-to-video",
"input": {
"image_urls": ["https://your-public-host.com/source.jpg"],
"prompt": "Camera slowly orbits around the subject, revealing the scene from a new angle.",
"duration": 8
}
}'
# => {"id": "task_...", "status": "pending"}
# 2. Poll until it's done
curl -s https://api.hiapi.ai/v1/tasks/task_... \
-H "Authorization: Bearer $HIAPI_API_KEY"
# => {"id": "task_...", "status": "success", "output": [{"url": "https://...mp4"}]}
Once status flips to success, download output[0].url immediately — it's a time-limited link, not a permanent one, so save the bytes to your own storage before it expires.
Check current numbers against hiapi's pricing page before you budget a batch, but as of this writing, grok-imagine-1.5/image-to-video bills per second of output:
| Resolution | Price per second |
|---|---|
| 480p | $0.0114 |
| 720p | $0.0214 |
A 4-second clip at 480p costs roughly $0.046; the same clip at 720p is about $0.086. Because pricing scales with duration rather than a flat per-generation fee, it's cheap to test several prompt variants on the same still before settling on a final cut — both clips in this article together cost well under $0.20.
Can I control the camera motion directly instead of describing it in the prompt?
No — there's no dedicated motion-strength, camera-path, or zoom parameter in this endpoint's schema. Camera behavior is driven entirely by how you word the prompt.
Does the output resolution match my source image? Framing follows the source image's aspect ratio, but resolution (480p vs 720p) is a pricing-tier choice, not something you set with a separate field — check the current schema on the model page linked above, since platform models occasionally add parameters.
What happens if I don't download the output fast enough?
The output[0].url from a completed task is time-limited. If you miss the window, you'll need to resubmit the task and pay for the generation again — there's no way to re-fetch an expired link.
Can I animate more than one still in a single request?
image_urls accepts a URL, but each task produces one clip from one source image. For batches, submit one task per still and poll them independently — the async model means you can have several in flight at once.
Ready to try it on your own image? Generate a short clip with your own prompt on the Grok Imagine 1.5 Image to Video model page, or start with the async task API docs if you're wiring this into an existing pipeline.
Key Takeaways