> ## 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 video chỉnh sửa xAI

> Sử dụng POST /grok/v1/videos/edits để chỉnh sửa video nguồn bằng một prompt văn bản, giữ nguyên chuyển động và nhận `request_id` để polling kết quả bất đồng bộ.

Sử dụng endpoint này để chỉnh sửa một tệp MP4 hiện có bằng một chỉ dẫn văn bản. Đầu ra sẽ bám sát hơn với nhịp thời gian và bố cục của clip nguồn so với một yêu cầu tạo mới.

## Trước khi gửi request

* Cung cấp `video.url` có thể truy cập được
* Giữ clip nguồn ngắn; hướng dẫn riêng của xAI giới hạn chỉnh sửa ở khoảng 8,7 giây
* Sử dụng một chỉ dẫn tập trung mô tả một thay đổi rõ ràng
* Lưu `request_id` được trả về, vì chỉnh sửa sử dụng cùng luồng polling như tạo video

## Quy trình chỉnh sửa

<Steps>
  <Step title="Gửi yêu cầu chỉnh sửa">
    Gửi URL video nguồn, prompt chỉnh sửa và `model: grok-imagine-video`.
  </Step>

  <Step title="Polling để lấy kết quả cuối cùng">
    Gọi [Lấy kết quả video xAI](./get-video-generation-results) cho đến khi tác vụ hoàn tất.
  </Step>

  <Step title="Lưu trữ tài nguyên đã chỉnh sửa">
    Tải đầu ra hoàn tất xuống hoặc đưa URL được trả về vào pipeline lưu trữ của riêng bạn.
  </Step>
</Steps>

## Những gì thay đổi trên CometAPI

xAI mô tả việc chỉnh sửa video có cùng vòng đời bất đồng bộ như tạo video, chỉ khác là dùng video nguồn thay vì hình ảnh nguồn tùy chọn. CometAPI giữ nguyên hành vi đó và cùng endpoint polling, vì vậy quy trình chỉnh sửa của bạn vẫn là bắt đầu -> polling -> tải xuống.


## OpenAPI

````yaml api/openapi/video/xai/post-video-edit.openapi.json POST /grok/v1/videos/edits
openapi: 3.1.0
info:
  title: Video Edit API
  version: 1.0.0
  description: >-
    Create an asynchronous xAI Grok video edit job from an existing source
    video.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /grok/v1/videos/edits:
    post:
      summary: Create an xAI video edit job
      description: >-
        Start a Grok video editing job from a source MP4 and a natural-language
        edit instruction. Poll the same query endpoint used by video generation.
      operationId: video_edit
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - prompt
                - video
              properties:
                prompt:
                  type: string
                  description: Edit instruction describing the change you want.
                  example: Add snow to the scene.
                model:
                  type: string
                  description: xAI video model id.
                  default: grok-imagine-video
                  example: grok-imagine-video
                video:
                  type: object
                  required:
                    - url
                  properties:
                    url:
                      type: string
                      description: Reachable source MP4 URL.
                  description: >-
                    Source video to edit. xAI documents an input limit of about
                    8.7 seconds.
                output:
                  type: object
                  description: Optional output delivery configuration.
                user:
                  type: string
                  description: Optional end-user identifier.
              default:
                prompt: Add snow to the scene.
                model: grok-imagine-video
                video:
                  url: https://example.com/source.mp4
            examples:
              Edit request:
                summary: Edit request
                value:
                  prompt: Add snow to the scene.
                  video:
                    url: https://example.com/source.mp4
                  model: grok-imagine-video
      responses:
        '200':
          description: Request accepted.
          content:
            application/json:
              schema:
                type: object
                required:
                  - request_id
                properties:
                  request_id:
                    type: string
                    description: Deferred request id used for polling.
                example:
                  request_id: e55813f7-911f-cfa8-208c-9c8e693b4d38
              example:
                request_id: <request_id>
      x-codeSamples:
        - lang: Shell
          label: Default
          source: |
            curl https://api.cometapi.com/grok/v1/videos/edits \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -H "Content-Type: application/json" \
              -d '{
                "model": "grok-imagine-video",
                "prompt": "Add snow to the scene.",
                "video": {"url": "https://your-video-host/source.mp4"}
              }'
        - lang: Python
          label: Default
          source: |
            import os
            import requests

            response = requests.post(
                "https://api.cometapi.com/grok/v1/videos/edits",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                json={
                    "model": "grok-imagine-video",
                    "prompt": "Add snow to the scene.",
                    "video": {"url": "https://your-video-host/source.mp4"},
                },
            )

            task = response.json()
            print(task["request_id"])  # poll GET /grok/v1/videos/{request_id}
        - lang: JavaScript
          label: Default
          source: >
            const response = await
            fetch("https://api.cometapi.com/grok/v1/videos/edits", {
                method: "POST",
                headers: {
                    Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({
                    model: "grok-imagine-video",
                    prompt: "Add snow to the scene.",
                    video: { url: "https://your-video-host/source.mp4" },
                }),
            });


            const task = await response.json();

            console.log(task.request_id); // poll GET
            /grok/v1/videos/{request_id}
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````