> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Créer une clé API

POST https://api.elevenlabs.io/v1/service-accounts/{service_account_user_id}/api-keys
Content-Type: application/json

Crée une clé API pour un compte de service

Reference: https://elevenlabs.io/docs/api-reference/service-accounts/api-keys/create

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Path parameters

- `service_account_user_id` (string, required)

### Body (application/json)

This endpoint expects a Body_create_service_account_api_key_v1_service_accounts__service_account_user_id__api_keys_post.

- `name` (string, required)
- `permissions` (BodyCreateServiceAccountApiKeyV1ServiceAccountsServiceAccountUserIdApiKeysPostPermissions, required) — Les autorisations de l’API XI.
- `character_limit` (integer, optional, nullable) — Limite de caractères de la clé API XI. Si elle est fournie, l’utilisation de cette clé API sera limitée à n caractères par mois, où n correspond à la valeur choisie. Les requêtes entraînant des frais échoueront une fois cette limite mensuelle atteinte.
- `allowed_ips` (list of string, optional, nullable) — Liste des adresses IP ou plages CIDR autorisées à utiliser cette clé API. Chaque entrée peut être une plage CIDR, par exemple « 10.0.0.0/24 », ou une adresse IP seule, normalisée en /32 ou /128. Lors de la création, omettez ce champ ou transmettez null pour autoriser toutes les IP. Lors de la mise à jour, omettez-le pour conserver la liste d'autorisation inchangée ou transmettez "clear" pour la supprimer.
- `third_party_disable_allowed` (boolean, optional, nullable) — Indique si le détenteur de cette clé peut la désactiver via le point de terminaison de désactivation autonome. Lors de la création, omettez cette valeur ou transmettez null pour utiliser la valeur par défaut du Workspace, activée pour les forfaits non Enterprise et désactivée pour les forfaits Enterprise. Lors de la mise à jour, omettez-la pour la laisser inchangée ou transmettez "clear" pour la réinitialiser à la valeur par défaut du Workspace. Cette option n’est prise en compte que pour les Workspaces où l’accès à la désactivation autonome est activé.
- `tts_concurrency_limit` (integer, optional, nullable) — Nombre maximal de requêtes simultanées de synthèse vocale et de conversion voix à voix pour cette clé API. Disponible uniquement pour les clients Enterprise.
- `dubbing_concurrency_limit` (integer, optional, nullable) — Nombre maximal de requêtes de doublage simultanées pour cette clé API. Disponible uniquement pour les clients Enterprise.
- `music_concurrency_limit` (integer, optional, nullable) — Nombre maximal de requêtes de génération musicale simultanées pour cette clé API. Disponible uniquement pour les clients Enterprise.

## Response

### 200

Réponse réussie

- `xi-api-key` (string, required)
- `key_id` (string, required)

## Errors

### 422 Unprocessable Entity Error

Erreur de validation

- `detail` (list of ValidationError, optional)

## Types

### BodyCreateServiceAccountApiKeyV1ServiceAccountsServiceAccountUserIdApiKeysPostPermissions

Les autorisations de l’API XI.

- list of enum
  - Allowed values: `text_to_speech`, `speech_to_speech`, `speech_to_text`, `models_read`, `models_write`, `voices_read`, `voices_write`, `voice_collections_read`, `voice_collections_write`, `speech_history_read`, `speech_history_write`, `sound_generation`, `audio_isolation`, `voice_generation`, `dubbing_read`, `dubbing_write`, `pronunciation_dictionaries_read`, `pronunciation_dictionaries_write`, `user_read`, `user_write`, `projects_read`, `projects_write`, `audio_native_read`, `audio_native_write`, `workspace_read`, `workspace_write`, `forced_alignment`, `convai_read`, `convai_write`, `music_generation`, `image_video_generation`, `flows`, `templates`, `add_voice_from_voice_library`, `create_instant_voice_clone`, `create_professional_voice_clone`, `publish_voice_to_voice_library`, `share_voice_externally`, `create_user_api_key`, `workspace_analytics_full_read`, `webhooks_write`, `service_account_write`, `group_members_manage`, `workspace_members_read`, `workspace_members_invite`, `workspace_members_remove`, `terms_of_service_accept`, `audit_log_read`, `conversation_privacy_manage`, `copy_resources_cross_workspace`, `synthid_detector`
- "all"

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### ValidationErrorLocItems

- string
- integer

## Examples

**Request**

```json
{
  "name": "string",
  "permissions": [
    "text_to_speech"
  ]
}
```

**Response**

```json
{
  "xi-api-key": "string",
  "key_id": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys"

payload = {
    "name": "string",
    "permissions": ["text_to_speech"]
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"name":"string","permissions":["text_to_speech"]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys"

	payload := strings.NewReader("{\n  \"name\": \"string\",\n  \"permissions\": [\n    \"text_to_speech\"\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"name\": \"string\",\n  \"permissions\": [\n    \"text_to_speech\"\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys")
  .header("Content-Type", "application/json")
  .body("{\n  \"name\": \"string\",\n  \"permissions\": [\n    \"text_to_speech\"\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys', [
  'body' => '{
  "name": "string",
  "permissions": [
    "text_to_speech"
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"name\": \"string\",\n  \"permissions\": [\n    \"text_to_speech\"\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "name": "string",
  "permissions": ["text_to_speech"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/service-accounts/service_account_user_id/api-keys")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```