> ## 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.

# Tạo một tác vụ video Midjourney

> Sử dụng POST /mj/submit/video trong CometAPI để gửi một job video Midjourney, thiết lập tham số và theo dõi quá trình xử lý cho đầu ra video được tạo.

Sử dụng endpoint này để biến một kết quả ảnh Midjourney thành một bản render video ngắn.

## Trước khi gọi

* Bắt đầu từ một kết quả ảnh Midjourney đã hoàn tất hoặc một URL ảnh được hỗ trợ
* Xem task id được trả về là điểm bắt đầu của một quy trình bất đồng bộ
* Dự kiến asset hoàn tất sẽ được trả về thông qua cùng endpoint polling được dùng bởi các tác vụ Midjourney khác

## Luồng tác vụ

<Steps>
  <Step title="Gửi tác vụ video">
    Bắt đầu render và lưu task id được trả về.
  </Step>

  <Step title="Poll cho đến khi tác vụ hoàn tất">
    Sử dụng [Fetch Single Task](./task-fetching-api/fetch-single-task) cho đến khi tác vụ đạt trạng thái kết thúc và cung cấp URL video cuối cùng.
  </Step>

  <Step title="Lưu trữ đầu ra">
    Di chuyển video đã hoàn tất vào hệ thống lưu trữ của riêng bạn nếu bạn cần lưu giữ ổn định vượt quá URL phân phối của nhà cung cấp.
  </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.

````