---
title: "create voice presigned upload"
method: POST
path: "/v1/voices/presigned-upload"
tags: ["Voices"]
---

# create voice presigned upload

`POST /v1/voices/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.

## Request body

- object
  - `filename` string, required — Original filename of the audio clip (used to derive the storage key).
  - `contentType` string, required — Audio MIME type (must start with `audio/`, e.g. audio/wav). The subsequent PUT must use the same value.
  - `fileSize` integer, required — Size of the file in bytes. Required and must not exceed 50MB (52428800).

## Response `200`

Presigned upload URL generated

- object
  - `uploadUrl` string — Presigned URL to PUT the audio bytes to (valid for 1 hour).
  - `audioKey` string — Opaque storage key to pass back to POST /v1/voices.

## Other responses

- `400` — Bad request - Invalid body or file too large
- `401` — Unauthorized - Invalid or missing API key
- `403` — Forbidden - Voice cloning not available on the current plan, or API key lacks the required permission
- `500` — Server error

---

[API](https://skmtc.net/anam/apis/anam-ai-api.md) · [All operations](https://skmtc.net/anam/apis/anam-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/anam/anam-ai-api/revisions/dae97e8eb063/schema)
