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

# Hailuo 02 Pro Image to Video

> Animate still images with Hailuo 02 Pro, with text guidance, prompt refinement, and an optional closing frame to shape the shot.

<Tip>
  1. Submit the request with `VIDGO_API_KEY`. A `task_id` is returned immediately. Keep it until the task reaches `finished` or `failed`.
  2. Use [Query Task Status](/api-manual/task-management/status) to retrieve the result. If you provide a `callback_url`, Vidgo sends the result to your [webhook](/api-manual/task-management/webhooks) when the task finishes or fails.
</Tip>

# Hailuo 02 Pro Image to Video

Animate still images with Hailuo 02 Pro, with text guidance, prompt refinement, and an optional closing frame to shape the shot.

## Available Models

* **minimax/hailuo-02/pro/image-to-video** - Generate video from image input.

## Output Options

* `resolution`: Optional. Accepted values: `512P`, `768P`. Default: `768P`.
* Do not send `duration`; the current PoYo Pro handler rejects this field.

## Key Features

* Generate video from image input.
* Accepts exactly 1 image in `image_urls`.
* Optionally supply an ending frame with `end_image_url`.

## Advanced Parameters

Set `model` and optional `callback_url` at the request root. Place all workflow parameters, including output options, inside `input`.

Send only the input fields supported by this workflow. Unsupported `input` fields are rejected before credits are deducted. Input URLs must use HTTP(S), include a hostname, and contain no embedded credentials.

* Resolution is forwarded to PoYo as supplied; no fixed output duration or 1080P output is asserted by this contract.

### Prompt

* `prompt`: Required. Describe the scene and desired motion. The current PoYo Pro handler has no explicit prompt length limit.
* Whitespace is trimmed before validation; the result must not be blank.

### Image URLs

* `image_urls`: Required. Provide publicly accessible image URLs. Supply exactly 1 item. Each item must be an HTTP(S) URL.

### End Image URL

* `end_image_url`: Optional. Provide the ending frame URL. Use a publicly accessible HTTP(S) URL. Requires a starting image in `image_urls`. The current Pro handler accepts an ending frame with either resolution.

### Prompt Optimizer

* `prompt_optimizer`: Optional. Control automatic prompt optimization. Use `true` or `false`.

## Pricing

65 credits (\$0.325) per generation, for either resolution.

1 credit = \$0.005. Credits are deducted on submission and refunded if the task fails.


## OpenAPI

````yaml api-manual/video-series/minimax-hailuo-02-pro-image-to-video.json POST /api/generate/submit
openapi: 3.0.0
info:
  title: Vidgo API - Hailuo 02 Pro Image to Video
  description: >-
    Animate still images with Hailuo 02 Pro, with text guidance, prompt
    refinement, and an optional closing frame to shape the shot.
  version: 1.0.0
servers:
  - url: https://api.vidgo.ai
security:
  - BearerAuth: []
paths:
  /api/generate/submit:
    post:
      tags:
        - Video Series
      summary: Hailuo 02 Pro Image to Video
      description: >-
        Send only the fields shown for this workflow. Parameters from other
        workflows are rejected before credits are deducted.


        When supplied, prompt and text must not be blank. Input URL fields
        require HTTP(S) URLs with a hostname and no embedded credentials.


        Pro accepts 512P and 768P (default 768P). Do not send duration. Prompts
        must be nonblank after trimming, with no explicit length limit in the
        current handler.
      operationId: submit_minimax_hailuo_02_pro_image_to_video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - model
                - input
              additionalProperties: true
              properties:
                model:
                  type: string
                  enum:
                    - minimax/hailuo-02/pro/image-to-video
                  example: minimax/hailuo-02/pro/image-to-video
                  description: >-
                    Vidgo public model ID. Must be
                    `minimax/hailuo-02/pro/image-to-video`.
                input:
                  type: object
                  required:
                    - image_urls
                    - prompt
                  description: Input parameters for generation
                  properties:
                    prompt:
                      type: string
                      description: >-
                        Required nonblank prompt, trimmed before validation. No
                        explicit length limit in the current PoYo handler.
                      example: A cinematic video scene
                      minLength: 1
                    image_urls:
                      type: array
                      items:
                        type: string
                        format: uri
                      maxItems: 1
                      description: >-
                        Reference image URLs for image-to-video generation
                        (required for image-to-video)
                      example:
                        - https://example.com/start.png
                      minItems: 1
                    end_image_url:
                      type: string
                      format: uri
                      description: Optional last-frame image URL; requires image_urls.
                      example: https://example.com/end_image.png
                    prompt_optimizer:
                      type: boolean
                      description: Enable AI-powered prompt optimization
                      example: true
                    resolution:
                      type: string
                      description: Resolution passed to PoYo. Defaults to 768P.
                      enum:
                        - 512P
                        - 768P
                      default: 768P
                      example: 768P
                  additionalProperties: false
                callback_url:
                  type: string
                  nullable: true
                  description: >-
                    Optional public HTTP(S) endpoint for task completion
                    notifications. HTTPS is recommended. Omit, use null, or use
                    an empty string to disable callbacks.
              description: >-
                Keep model and callback_url at the root. Unknown root fields are
                ignored; unsupported input fields are rejected.
            examples:
              basic:
                summary: Basic workflow
                value:
                  model: minimax/hailuo-02/pro/image-to-video
                  input:
                    image_urls:
                      - https://example.com/image.png
                    prompt: >-
                      A quiet forest under soft morning light, with natural
                      detail.
                    resolution: 768P
              callback:
                summary: Receive a completion callback
                value:
                  model: minimax/hailuo-02/pro/image-to-video
                  input:
                    image_urls:
                      - https://example.com/image.png
                    prompt: >-
                      A quiet forest under soft morning light, with natural
                      detail.
                    resolution: 768P
                  callback_url: https://your-domain.com/callback
      responses:
        '200':
          description: Task submitted
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - data
                properties:
                  code:
                    type: integer
                    enum:
                      - 200
                  data:
                    type: object
                    required:
                      - task_id
                      - status
                      - created_time
                    properties:
                      task_id:
                        type: string
                      status:
                        type: string
                        enum:
                          - not_started
                          - running
                          - finished
                          - failed
                      created_time:
                        type: string
                        format: date-time
              example:
                code: 200
                data:
                  task_id: task-unified-example
                  status: running
                  created_time: '2026-09-10T08:00:00'
        '400':
          description: >-
            Invalid input, unsupported tier, inaccessible media, or insufficient
            credits
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '401':
          description: Invalid credentials
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '403':
          description: Access denied
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '404':
          description: Unknown or disabled model
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '408':
          description: Request timed out
          content:
            text/plain:
              schema:
                type: string
              example: Request timeout
        '422':
          description: Invalid JSON or non-object request body
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '429':
          description: Rate or API key credit limit exceeded
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '502':
          description: Unable to create the upstream generation task
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
        '503':
          description: Model configuration or capability is not approved
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Use VIDGO_API_KEY.

````