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

# Clone voice from sample audio (async)

> Submit a voice cloning job. The HTTP response only confirms acceptance (`taskId`). The new `voiceId` arrives in your [Webhook](/guides/webhooks) callback (`event`: `openapi-clone-voice`).



## OpenAPI

````yaml /api-reference/openapi.json post /openapi/v1/task/clone-voice/create-async
openapi: 3.1.0
info:
  title: VMEG Open API
  description: >-
    Integrate VMEG into your product: translate and dub video or audio,
    synthesize speech, clone voices, translate plain text, and manage API-side
    files. All responses use `{ code, message, data }`; `code === 200` means
    success.
  version: 1.0.0
servers:
  - url: https://api.vmeg.ai
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Media translation
    x-group: Video & audio translate and dub
    description: >-
      Localize uploaded video or audio end-to-end: transcribe speech, translate
      the script, generate AI dubbing (cloned or preset voices), and return new
      dubbed media. Optional subtitles and lip sync. **Async only** — dubbed
      files arrive via [Webhook](/guides/webhooks). This is not plain text
      translation; see [Media translation](/guides/products/media-translation).
  - name: TTS
    x-group: Text to speech (TTS)
    description: >-
      Turn text into natural speech with preset or cloned voices. **Sync**
      returns audio URLs in the HTTP response; **async** delivers results via
      [Webhook](/guides/webhooks). See [Text to
      speech](/guides/products/text-to-speech).
  - name: Voice clone
    x-group: Voice cloning
    description: >-
      Create a reusable voice from a short reference recording. Returns a
      `voiceId` you can pass to TTS or translate-and-dub jobs. See [Voice
      clone](/guides/products/voice-clone).
  - name: Text translation
    x-group: Text translation (text only)
    description: >-
      Translate plain text segments — no audio or video processing. For spoken
      content in media files, use **Video & audio translate and dub** instead.
      See [Text translation](/guides/products/text-translation).
  - name: Task management
    x-group: Task status and history
    description: >-
      List, inspect, or delete jobs created through any product API. Poll `GET
      .../tasks/detail` when you cannot rely on webhooks. Scoped to your **API
      Key**. See [Products overview](/guides/products/overview).
  - name: Assets - Materials
    x-group: Upload files (materials)
    description: >-
      Upload and manage video/audio files used as input for translate-and-dub
      jobs. Flow: presigned upload → register material → pass `materialId` to
      create-async. See [Material upload](/guides/assets/material-upload).
  - name: Assets - Voices
    x-group: Voices (presets and clones)
    description: >-
      List preset voices for TTS, or manage voices you cloned. Cloned voices are
      created via **Voice cloning**. See [Voices](/guides/assets/voices).
paths:
  /openapi/v1/task/clone-voice/create-async:
    post:
      tags:
        - Voice clone
      summary: Clone voice from sample audio (async)
      description: >-
        Submit a voice cloning job. The HTTP response only confirms acceptance
        (`taskId`). The new `voiceId` arrives in your
        [Webhook](/guides/webhooks) callback (`event`: `openapi-clone-voice`).
      operationId: cloneVoiceCreateAsync
      parameters:
        - $ref: '#/components/parameters/IdempotencyKeyRequired'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpenApiCloneVoiceCreateAsyncRequest'
      responses:
        '200':
          description: >-
            Acceptance only (`taskId`). Final results are in the
            [Webhook](/guides/webhooks) callback request body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenApiTaskAcceptedResponse'
      callbacks:
        taskCompleted:
          https://{yourWebhookUrl}:
            post:
              summary: >-
                Webhook when async task finishes (`event`:
                `openapi-clone-voice`)
              description: >-
                HTTP **request body** VMEG POSTs to your
                [Webhook](/guides/webhooks) URL when a Voice clone async task
                finishes. The JSON field `event` is `openapi-clone-voice` (see
                [Webhook request body](/guides/webhook-request)). Not part of
                the create-async **Response** above. Full schema: [Create voice
                clone
                (async)](/api-reference/clone-voice/create-voice-clone-async) →
                **Callbacks**.
              parameters:
                - $ref: '#/components/parameters/CallbackTimestamp'
                - $ref: '#/components/parameters/CallbackSignature'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: >-
                        #/components/schemas/OpenApiCloneVoiceTaskCompletedCallback
              responses:
                '200':
                  description: Return 2xx promptly to stop retries
              method: post
              type: path
            path: https://{yourWebhookUrl}
components:
  parameters:
    IdempotencyKeyRequired:
      name: X-Idempotency-Key
      in: header
      required: true
      description: >-
        Required on mutating `POST` requests that create tasks or change
        persisted data (max 64 characters). See
        [Idempotency](/guides/idempotency).
      schema:
        type: string
        maxLength: 64
    CallbackTimestamp:
      name: X-Timestamp
      in: header
      required: true
      description: Unix timestamp in milliseconds (string)
      schema:
        type: string
    CallbackSignature:
      name: X-Signature
      in: header
      required: true
      description: Lowercase hex HMAC-SHA256(secret, X-Timestamp + rawBody)
      schema:
        type: string
  schemas:
    OpenApiCloneVoiceCreateAsyncRequest:
      allOf:
        - $ref: '#/components/schemas/OpenApiCloneVoiceCreateRequest'
        - type: object
          properties:
            extraData:
              $ref: '#/components/schemas/OpenApiExtraData'
    OpenApiTaskAcceptedResponse:
      allOf:
        - $ref: '#/components/schemas/OpenApiResponseBase'
        - type: object
          properties:
            data:
              $ref: '#/components/schemas/OpenApiTaskAcceptedData'
    OpenApiCloneVoiceTaskCompletedCallback:
      description: >-
        Webhook callback **request body** for Voice clone when `event` is
        `openapi-clone-voice`. `data.voiceId` (and related fields when
        successful). See [Webhook request body](/guides/webhook-request) and
        [Create voice clone
        (async)](/api-reference/clone-voice/create-voice-clone-async) →
        **Callbacks**.
      allOf:
        - $ref: '#/components/schemas/OpenApiCallbackEnvelope'
        - type: object
          required:
            - data
          properties:
            data:
              description: >-
                Product-specific results when `event` is `openapi-clone-voice`.
                `data.voiceId` (and related fields when successful).
              allOf:
                - $ref: '#/components/schemas/OpenApiCloneVoiceCreateData'
    OpenApiCloneVoiceCreateRequest:
      type: object
      properties:
        voiceName:
          type: string
          description: Display name for the cloned voice in your asset library
        provider:
          type: string
          enum:
            - V1
            - V2
            - V3
            - V4
            - V5
          example: V1
          description: >-
            Clone engine (`V1`–`V5`). See [Supported clone
            methods](/guides/supported-clone-methods).
        refAudio:
          type: string
          description: HTTPS reference audio URL
        sampleLanguage:
          type: string
          example: zh-CN
          description: >-
            Sample language locale (BCP-47). See [Supported
            languages](/guides/supported-languages).
        sampleText:
          type: string
          description: Optional transcript of `refAudio` to improve clone quality
    OpenApiExtraData:
      type: object
      additionalProperties: true
      description: >-
        Optional client metadata on async submit; echoed in the completion
        webhook (`extraData` in callback body). Not used on sync create
        endpoints.
    OpenApiResponseBase:
      type: object
      properties:
        code:
          type: integer
          example: 200
          description: Business code; 200 means success
        message:
          type: string
          example: ''
          description: Human-readable detail when `code` is not success
      required:
        - code
    OpenApiTaskAcceptedData:
      type: object
      description: Immediate response for async task submission (no task results)
      required:
        - taskId
      properties:
        taskId:
          type: string
          description: Open API task ID; use for polling or correlation
        createdAt:
          type: string
          description: Returned by TTS and text translation async create
    OpenApiCallbackEnvelope:
      type: object
      description: >-
        Shared top-level fields of the webhook POST body when an async task
        finishes. See [Webhook request body](/guides/webhook-request) for the
        `event` field and per-product values.
      properties:
        code:
          type: integer
          example: 200
          description: Business outcome for this delivery
        version:
          type: string
          example: v1
          description: >-
            API version of the task (e.g. `v1`, `v2`). Matches the version in
            the request path (`/openapi/v1/...`).
        event:
          type: string
          enum:
            - openapi-tts
            - openapi-translate
            - openapi-clone-voice
            - openapi-media-translation
          example: openapi-tts
          description: >-
            Which product completed. Route your handler by this value:
            `openapi-tts` (TTS), `openapi-translate` (text translation),
            `openapi-clone-voice` (voice clone), `openapi-media-translation`
            (media translation). Listed in [Webhook request
            body](/guides/webhook-request).
        pipelineKey:
          type: string
          example: a1b2c3d4e5f6789012345678901234ab
          description: >-
            Stable ID for this async completion. Deduplicate webhook handling by
            this value — see [Webhook request
            body](/guides/webhook-request#deduplicate-by-pipelinekey).
        message:
          type: string
          description: Detail when `code` is not success
        extraData:
          type: object
          additionalProperties: true
          description: Echo of `extraData` from your async submit request
    OpenApiCloneVoiceCreateData:
      type: object
      properties:
        taskId:
          type: string
          description: Open API task ID (async clone)
        voiceId:
          type: string
          description: New cloned voice ID for TTS. See [Voices](/guides/assets/voices)
        createdAt:
          type: string
          description: Task creation time (ISO 8601)
  securitySchemes:
    apiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Send your API Key in the **`Authorization`** header (`Bearer
        <api_key>`). See [Authentication](/guides/authentication).

````