> ## Documentation Index
> Fetch the complete documentation index at: https://doc.duoyuanx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Grok Imagine Video

> Use `POST /v1/videos` with the `grok-imagine-video` model to submit JSON video generation tasks.

# Grok Imagine Video

`grok-imagine-video` is the video generation model of the Grok Imagine series. It uses a JSON request body and supports text-to-video and reference-image video generation.

* The endpoint path is `POST /v1/videos`.
* The request format is `application/json`.
* Text-to-video only requires `model`, `prompt`, `seconds`, `aspect_ratio`, and `resolution`.
* For image-to-video, use `image` for a single image and `images` for multiple images.
* `resolution` supports `480P` and `720P`.
* `prompt` supports up to `4096` characters.

## Method and Path

```http theme={null}
POST /v1/videos
```

<RequestExample>
  ```bash Text-to-Video cURL theme={null}
  curl -X POST https://duoyuanx.com/v1/videos \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "grok-imagine-video",
      "prompt": "A city street in the early morning, sunlight filtering through leaves, camera slowly moving forward",
      "seconds": "8",
      "aspect_ratio": "16:9",
      "resolution": "720P"
    }'
  ```

  ```bash Single-Image cURL theme={null}
  curl -X POST https://duoyuanx.com/v1/videos \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "grok-imagine-video",
      "prompt": "Have the person in the reference image turn around naturally, keeping a soft depth of field in the background",
      "seconds": "6",
      "aspect_ratio": "9:16",
      "resolution": "720P",
      "image": "data:image/png;base64,BASE64_IMAGE_DATA"
    }'
  ```

  ```bash Multi-Image cURL theme={null}
  curl -X POST https://duoyuanx.com/v1/videos \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "grok-imagine-video",
      "prompt": "Reference the subject features from multiple images to generate a coherent product showcase video",
      "seconds": "10",
      "aspect_ratio": "16:9",
      "resolution": "720P",
      "images": [
        "data:image/png;base64,FIRST_IMAGE_BASE64",
        "data:image/png;base64,SECOND_IMAGE_BASE64"
      ]
    }'
  ```

  ```python Python theme={null}
  import base64
  import requests

  def to_data_url(path, mime="image/png"):
      with open(path, "rb") as f:
          encoded = base64.b64encode(f.read()).decode("ascii")
      return f"data:{mime};base64,{encoded}"

  resp = requests.post(
      "https://duoyuanx.com/v1/videos",
      headers={
          "Authorization": "Bearer YOUR_API_KEY",
          "Content-Type": "application/json",
      },
      json={
          "model": "grok-imagine-video",
          "prompt": "Have the person in the reference image smile at the camera, with hair and clothing swaying slightly",
          "seconds": "6",
          "aspect_ratio": "16:9",
          "resolution": "720P",
          "image": to_data_url("reference.png"),
      },
      timeout=60,
  )

  print(resp.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://duoyuanx.com/v1/videos", {
    method: "POST",
    headers: {
      Authorization: "Bearer YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "grok-imagine-video",
      prompt: "Have the person in the reference image smile at the camera, with hair and clothing swaying slightly",
      seconds: "6",
      aspect_ratio: "16:9",
      resolution: "720P",
      image: "data:image/png;base64,BASE64_IMAGE_DATA",
    }),
  });

  console.log(await response.json());
  ```
</RequestExample>

## Response Example

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "video_abc123",
    "object": "video",
    "model": "grok-imagine-video",
    "status": "queued",
    "progress": 0,
    "created_at": 1735689600,
    "seconds": "6",
    "size": "720P",
    "video_url": ""
  }
  ```

  ```json 400 theme={null}
  {
    "error": {
      "message": "prompt is required",
      "type": "new_api_error",
      "param": "prompt",
      "code": "invalid_request"
    }
  }
  ```
</ResponseExample>

## Authentication

```http theme={null}
Authorization: Bearer YOUR_API_KEY
```

## Body

<ParamField body="model" type="string" required>
  Always pass `grok-imagine-video`.
</ParamField>

<ParamField body="prompt" type="string" required>
  Video generation prompt. Up to `4096` characters.
</ParamField>

<ParamField body="seconds" type="string">
  Target duration in seconds. Minimum is `1` second; passing it as a string is recommended, e.g. `"6"`.
</ParamField>

<ParamField body="aspect_ratio" type="string">
  Aspect ratio. Supports common presets `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `2:3`, `2:1`, `1:2`, `19.5:9`, `9:19.5`, `20:9`, `9:20`, as well as custom `number:number` ratios.
</ParamField>

<ParamField body="resolution" type="string">
  Output resolution. Supports `480P` and `720P`; numeric forms like `480` and `720` are also accepted.
</ParamField>

<ParamField body="image" type="string">
  Single reference image, as a data URI such as `data:image/png;base64,...`.
</ParamField>

<ParamField body="images" type="array<string>">
  Multiple reference images. Each array member is a data URI such as `data:image/png;base64,...`. Do not pass `image` together with `images`.
</ParamField>

## Response

<ResponseField name="id" type="string">
  Task ID. Query the result later with `GET /v1/videos/{id}`.
</ResponseField>

<ResponseField name="object" type="string">
  Object type, usually `video`.
</ResponseField>

<ResponseField name="model" type="string">
  The model name actually submitted.
</ResponseField>

<ResponseField name="status" type="string">
  Task status. Common values are `queued`, `processing`, `completed`, `failed`, `cancelled`.
</ResponseField>

<ResponseField name="progress" type="integer">
  Task progress percentage.
</ResponseField>

<ResponseField name="video_url" type="string">
  Video URL after the task completes. You can also download the result with `GET /v1/videos/{task_id}/content`.
</ResponseField>

## Differences from Grok 1.5 / 3

| Item              | `grok-imagine-video`     | `grok-video-1.5` / `grok-video-3`      |
| ----------------- | ------------------------ | -------------------------------------- |
| Request format    | JSON                     | `multipart/form-data`                  |
| Image field       | `image` / `images`       | `input_reference`                      |
| Resolution field  | `resolution`             | `size`                                 |
| Resolution values | `480P`, `720P`           | `480P`, `540P`, `720P`, `1080P`        |
| Duration rules    | Custom seconds, min `1s` | `10s` for Pro tier, `15s` for Max tier |

## Related Endpoints

* [Grok Video Overview](./overview)
* [Grok Video Generation](./generation)
* [Grok Imagine 1.5 Preview](./grok-imagine-1-5-preview)
* [Grok Task Query](./query)
