---
title: "Save the organization's ElevenLabs API key"
method: PUT
path: "/v1/voices/elevenlabs-key"
tags: ["Voices"]
---

# Save the organization's ElevenLabs API key

`PUT /v1/voices/elevenlabs-key`

## Request

- Base URL: `https://api.anam.ai`
- URL: `https://api.anam.ai/v1/voices/elevenlabs-key`
- Auth: HTTP bearer

Saves or replaces the organization's ElevenLabs API key, for voices that only exist in its own ElevenLabs account: instant clones, Voice Design voices and Professional Voice Clones. Anam checks the key with ElevenLabs on each of its API hosts, including data-residency hosts, and stores it encrypted. Afterwards, `POST /v1/voice-imports` with `useOrganizationKey: true` imports a voice that speaks with it, and ElevenLabs bills that speech to the key's account. The key needs Text to Speech access, which Anam checks without generating speech.

## Request body

- SaveElevenLabsKeyRequest
  - `apiKey` string, required: An ElevenLabs API key with Text to Speech access. Never returned.

## Response `200`

The key was saved. Returns the new status.

- ElevenLabsKeyStatus
  - `enabled` boolean, required: Always true: every organization can save a key and import voices with useOrganizationKey. Kept for existing clients.
  - `saved` boolean, required: Whether a key is saved.
  - `hint` string, nullable, required: The saved key's last four characters.
  - `voiceCount` integer, required: Voices that speak with the key.
  - `lastValidatedAt` string, date-time, nullable, required: When Anam last checked the key with ElevenLabs.
  - `lastUsedAt` string, date-time, nullable, required: When a session last started with the key, recorded at most hourly.

## Other responses

- `400`: The body is invalid (`invalid_request`), or ElevenLabs doesn't recognize the key on any host, or it's a Cartesia key (`invalid_elevenlabs_key`).
- `401`: Missing or invalid API key
- `403`: API key lacks voice write access
- `422`: ElevenLabs knows the key but it lacks Text to Speech access (`elevenlabs_key_missing_permissions`). Edit the key in ElevenLabs and retry with the same key.
- `429`: Too many key checks for this organization this hour (`rate_limited`, retryable). Each save is checked against every ElevenLabs API host, so saves are limited to 10 an hour.
- `502`: ElevenLabs didn't answer the key check (`provider_unavailable`, retryable).
- `503`: The API key could not be checked because of a temporary server problem. The key may be valid; retry after `Retry-After` seconds.

## Changes

- **2026-10-29** `67eee25e972a`: 6 warning, 1 info
  - added the new `elevenlabs_key_missing_permissions` enum value to the `code` response property for the response status `400`
  - added the new `elevenlabs_key_missing_permissions` enum value to the `code` response property for the response status `401`
  - added the new `elevenlabs_key_missing_permissions` enum value to the `code` response property for the response status `403`
  - added the new `elevenlabs_key_missing_permissions` enum value to the `code` response property for the response status `429`
  - …3 more
- **2026-10-26** `e85ef0cd491e`: 1 info
  - added the non-success response with the status `503`
- **2026-10-23** `ee0188ac8fa4`: 5 info
  - removed the `organization_key_unavailable` enum value from the `code` response property for the response status `400`
  - removed the `organization_key_unavailable` enum value from the `code` response property for the response status `401`
  - removed the `organization_key_unavailable` enum value from the `code` response property for the response status `403`
  - removed the `organization_key_unavailable` enum value from the `code` response property for the response status `429`
  - …1 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/anam/apis/anam-ai-api/changes/v1/voices/elevenlabs-key/put.md)

---

[API](https://skmtc.dev/anam/apis/anam-ai-api.md) - [All operations](https://skmtc.dev/anam/apis/anam-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/anam/apis/anam-ai-api/revisions/3e535ea89083?raw)
