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

# create voice presigned upload

> Request a presigned URL for uploading a voice-clone audio clip directly to storage. Use this for clips larger than the ~4.5MB request-body limit of the multipart `POST /v1/voices` endpoint. Flow: (1) call this endpoint to get an `uploadUrl` and `audioKey`; (2) `PUT` the raw audio bytes to `uploadUrl` with the same `Content-Type`; (3) call `POST /v1/voices` with a JSON body referencing the `audioKey` to perform the clone.



## OpenAPI

````yaml https://api.anam.ai/swagger.json post /v1/voices/presigned-upload
openapi: 3.1.0
info:
  title: Anam AI API
  version: '1.0'
servers:
  - url: https://api.anam.ai
    description: Anam API
security:
  - BearerAuth: []
tags:
  - name: Sessions
  - name: Personas
  - name: Avatars
  - name: Voices
  - name: LLMs
  - name: Knowledge
  - name: Tools
  - name: Share Links
  - name: Engine
paths:
  /v1/voices/presigned-upload:
    post:
      tags:
        - Voices
      summary: create voice presigned upload
      description: >-
        Request a presigned URL for uploading a voice-clone audio clip directly
        to storage. Use this for clips larger than the ~4.5MB request-body limit
        of the multipart `POST /v1/voices` endpoint. Flow: (1) call this
        endpoint to get an `uploadUrl` and `audioKey`; (2) `PUT` the raw audio
        bytes to `uploadUrl` with the same `Content-Type`; (3) call `POST
        /v1/voices` with a JSON body referencing the `audioKey` to perform the
        clone.
      operationId: createVoicePresignedUpload
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - filename
                - contentType
                - fileSize
              properties:
                filename:
                  type: string
                  description: >-
                    Original filename of the audio clip (used to derive the
                    storage key).
                contentType:
                  type: string
                  description: >-
                    Audio MIME type (must start with `audio/`, e.g. audio/wav).
                    The subsequent PUT must use the same value.
                fileSize:
                  type: integer
                  description: >-
                    Size of the file in bytes. Required and must not exceed 50MB
                    (52428800).
      responses:
        '200':
          description: Presigned upload URL generated
          content:
            application/json:
              schema:
                type: object
                properties:
                  uploadUrl:
                    type: string
                    description: >-
                      Presigned URL to PUT the audio bytes to (valid for 1
                      hour).
                  audioKey:
                    type: string
                    description: Opaque storage key to pass back to POST /v1/voices.
        '400':
          description: Bad request - Invalid body or file too large
        '401':
          description: Unauthorized - Invalid or missing API key
        '403':
          description: Forbidden - Voice cloning not available on the current plan
        '500':
          description: Server error
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer

````