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

# Create a Midjourney video task

> Use POST /mj/submit/video in CometAPI to submit a Midjourney video job, set parameters, and track processing for generated video output.

Use this endpoint to turn a Midjourney image result into a short video render.

## Before you call it

* Start from a finished Midjourney image result or a supported image URL
* Treat the returned task id as the start of an async workflow
* Expect the finished asset to arrive through the same polling endpoint used by other Midjourney tasks

## Task flow

<Steps>
  <Step title="Submit the video task">
    Start the render and store the returned task id.
  </Step>

  <Step title="Poll until the task finishes">
    Use [Fetch Single Task](./task-fetching-api/fetch-single-task) until the task reaches a terminal state and exposes the final video URL.
  </Step>

  <Step title="Persist the output">
    Move the finished video into your own storage if you need stable retention beyond the provider delivery URL.
  </Step>
</Steps>


## OpenAPI

````yaml api/openapi/image/midjourney/post-submit-video.openapi.json POST /mj/submit/video
openapi: 3.1.0
info:
  title: Submit Video API
  version: 1.0.0
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /mj/submit/video:
    post:
      summary: Submit Video
      operationId: submit_video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - motion
                - image
              properties:
                prompt:
                  type: string
                  description: Text prompt to guide the video generation.
                motion:
                  type: string
                  description: Motion intensity of the generated video.
                  enum:
                    - low
                    - high
                  default: low
                image:
                  type: string
                  description: >-
                    First-frame image as a public URL or base64-encoded data
                    URI.
                  default: https://your-image-host/source.jpg
                action:
                  type: string
                  description: >-
                    Action to perform on an existing video task. When set,
                    `index` and `taskId` are required.
                index:
                  type: integer
                  description: >-
                    Zero-based index selecting which video variant to act on
                    from the parent task.
                taskId:
                  type: string
                  description: >-
                    Parent task id to continue from. Required when `action` is
                    set.
                state:
                  type: string
                  description: >-
                    Custom state string. Returned as-is in the task result and
                    webhook callback for your own tracking.
                noStorage:
                  type: boolean
                  description: >-
                    When `true`, return the original provider video URL instead
                    of a CometAPI-proxied link.
                videoType:
                  type: string
                  description: >-
                    Video model variant, e.g. `vid_1.1_i2v_480` (480p) or
                    `vid_1.1_i2v_720` (720p).
              default:
                motion: low
                image: https://your-image-host/source.jpg
            examples:
              Image to video:
                summary: >-
                  Image to video (replace the image URL with your first-frame
                  image)
                value:
                  prompt: A Bee in Flight
                  motion: low
                  image: https://your-image-host/first-frame.png
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - description
                  - result
                  - properties
                properties:
                  code:
                    type: integer
                    description: >-
                      Submission status code. `1` = submitted successfully
                      (`result` carries the task id). `21` = the action opened a
                      confirmation modal; continue with `/mj/submit/modal` using
                      the returned task id. `4` = parameter error; `description`
                      explains the cause.
                  description:
                    type: string
                  result:
                    type: string
                  properties:
                    type: object
                    required:
                      - prompt
                    properties:
                      prompt:
                        type: string
      x-codeSamples:
        - lang: Shell
          label: Default
          source: |
            curl https://api.cometapi.com/mj/submit/video \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -H "Content-Type: application/json" \
              -d '{
                "prompt": "The paper boat drifts slowly forward",
                "motion": "low",
                "image": "https://your-image-host/first-frame.png",
                "videoType": "vid_1.1_i2v_480"
              }'
        - lang: Python
          label: Default
          source: |
            import os
            import requests

            response = requests.post(
                "https://api.cometapi.com/mj/submit/video",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                json={
                    "prompt": "The paper boat drifts slowly forward",
                    "motion": "low",
                    "image": "https://your-image-host/first-frame.png",
                    "videoType": "vid_1.1_i2v_480",
                },
            )

            task = response.json()
            print(task["code"], task.get("result"))
        - lang: JavaScript
          label: Default
          source: >
            const response = await
            fetch("https://api.cometapi.com/mj/submit/video", {
                method: "POST",
                headers: {
                    Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({
                    prompt: "The paper boat drifts slowly forward",
                    motion: "low",
                    image: "https://your-image-host/first-frame.png",
                    videoType: "vid_1.1_i2v_480",
                }),
            });


            const task = await response.json();

            console.log(task.code, task.result);
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````