# Créateurs | Docs AudioDN

> Points de terminaison API pour créer, mettre à jour, lister et supprimer des créateurs dans AudioDN. Les créateurs sont des sous-comptes sous votre organisation utilisés pour classer les collections et pistes et suivre l

Source: https://audiodeliverynetwork.com/fr/docs/api/creators/

---

# Créateurs

Un créateur est un sous-compte sous votre organisation, représentant typiquement un contributeur de contenu individuel comme un artiste ou un podcasteur. Les créateurs sont utilisés pour classer les collections et les pistes, les limiter à un dossier de stockage dédié, et suivre l’utilisation à un niveau granulaire. Une fois qu’un créateur existe, passez son `creator_id` lors de la création de collections, pistes ou sessions d’envoi pour les associer à ce créateur.

L’`organization_index` est votre propre identifiant externe pour le créateur (par exemple, l’identifiant du créateur dans votre système). Il est requis lors de la création d’un créateur et peut être utilisé pour résoudre le créateur plus tard si vous n’avez pas le `creator_id` AudioDN sous la main.

GET `/v1/creator`

Renvoie une liste de créateurs pour une organisation

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `limit` | number | Facultatif | Nombre maximum de créateurs à renvoyer |
| `offset` | number | Facultatif | Nombre de créateurs à ignorer |

#### Exemple de requête

    

```
curl -X GET "https://api.audiodelivery.net/v1/creator" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```
const response = await fetch('https://api.audiodelivery.net/v1/creator', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  }
});

const data = await response.json();
```

```
import Foundation

func performRequest() async throws {
    var request = URLRequest(url: URL(string: "https://api.audiodelivery.net/v1/creator")!)
    request.httpMethod = "GET"
    request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
    let (data, _) = try await URLSession.shared.data(for: request)
    let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
    // use json
}
```

```
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.*

val client = OkHttpClient()

suspend fun performRequest(): String = withContext(Dispatchers.IO) {
    val request = Request.Builder()
        .url("https://api.audiodelivery.net/v1/creator")
        .addHeader("Authorization", "Bearer YOUR_API_KEY")
        .build()
    val response = client.newCall(request).execute()
    response.body?.string() ?: error("Empty response body")
}
```

```
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<Map<String, dynamic>> performRequest() async {
  final response = await http.get(
    Uri.parse("https://api.audiodelivery.net/v1/creator"),
    headers: {
      "Authorization": "Bearer YOUR_API_KEY",
    },
  );
  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw Exception('Request failed: ${response.statusCode}');
  }
  return jsonDecode(response.body) as Map<String, dynamic>;
}
```

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"count": 0,
"creators": [
  {
    "id": "uuid",
    "organization_id": "uuid",
    "folder_id": "uuid",
    "organization_index": "string",
    "metadata": {},
    "created_at": "string",
    "updated_at": "string"
  }
]
}
```

GET `/v1/creator/:creator_id`

Renvoie les détails d'un créateur spécifique

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `creator_id` | uuid | Obligatoire | L'identifiant du créateur à récupérer (paramètre de chemin) |

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"creator_id": "uuid",
"creator": {
  "id": "uuid",
  "organization_id": "uuid",
  "folder_id": "uuid",
  "organization_index": "string",
  "metadata": {},
  "created_at": "string",
  "updated_at": "string"
}
}
```

POST `/v1/creator`

Crée un nouveau créateur

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `organization_index` | string | Obligatoire | Votre identifiant externe pour le créateur (l'identifiant du service distant) |
| `metadata` | object | Facultatif | Métadonnées d'organisation pour le créateur |

#### Exemple de requête

    

```
curl -X POST "https://api.audiodelivery.net/v1/creator" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "organization_index": "artist-123"
}'
```

```
const payload = {
  "organization_index": "artist-123"
};

const response = await fetch('https://api.audiodelivery.net/v1/creator', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload)
});

const data = await response.json();
```

```
import Foundation

func performRequest() async throws {
    var request = URLRequest(url: URL(string: "https://api.audiodelivery.net/v1/creator")!)
    request.httpMethod = "POST"
    request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    let bodyJSON = """
{
  "organization_index": "artist-123"
}
"""
    request.httpBody = bodyJSON.data(using: .utf8)
    let (data, _) = try await URLSession.shared.data(for: request)
    let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
    // use json
}
```

```
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody

val client = OkHttpClient()

suspend fun performRequest(): String = withContext(Dispatchers.IO) {
    val body = """{
  "organization_index": "artist-123"
}""".toRequestBody("application/json".toMediaType())
    val request = Request.Builder()
        .url("https://api.audiodelivery.net/v1/creator")
        .post(body)
        .addHeader("Authorization", "Bearer YOUR_API_KEY")
        .addHeader("Content-Type", "application/json")
        .build()
    val response = client.newCall(request).execute()
    response.body?.string() ?: error("Empty response body")
}
```

```
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<Map<String, dynamic>> performRequest() async {
  final response = await http.post(
    Uri.parse("https://api.audiodelivery.net/v1/creator"),
    headers: {
      "Authorization": "Bearer YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: jsonEncode({
  "organization_index": "artist-123"
}),
  );
  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw Exception('Request failed: ${response.statusCode}');
  }
  return jsonDecode(response.body) as Map<String, dynamic>;
}
```

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"creator_id": "uuid",
"creator": {
  "id": "uuid",
  "organization_id": "uuid",
  "folder_id": "uuid",
  "organization_index": "string",
  "metadata": {},
  "created_at": "string",
  "updated_at": "string"
}
}
```

Créer un créateur provisionne aussi un dossier de stockage dédié et le lie via `folder_id`. Les collections et pistes créées avec ce `creator_id` sont stockées dans le même dossier.

PUT `/v1/creator/:creator_id`

Met à jour un créateur existant

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `creator_id` | uuid | Obligatoire | L'identifiant du créateur à mettre à jour (paramètre de chemin) |
| `organization_index` | string | Facultatif | Votre identifiant externe pour le créateur |
| `metadata` | object | Facultatif | Métadonnées d'organisation pour le créateur |

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"creator_id": "uuid",
"creator": {
  "id": "uuid",
  "organization_id": "uuid",
  "folder_id": "uuid",
  "organization_index": "string",
  "metadata": {},
  "created_at": "string",
  "updated_at": "string"
}
}
```

DELETE `/v1/creator/:creator_id`

Supprime un créateur de façon logicielle (uniquement lorsqu'il n'a aucune collection ou piste non supprimée)

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `creator_id` | uuid | Obligatoire | L'identifiant du créateur à supprimer (paramètre de chemin) |

Les créateurs ne déclenchent jamais de suppression en cascade. Si le créateur a encore des collections ou pistes non supprimées, la requête est rejetée avec `409` — supprimez-les d’abord. Lorsqu’aucun enfant non supprimé ne reste, le dossier de stockage du créateur est supprimé de façon logicielle avec le créateur.

#### Exemple de requête

    

```
curl -X DELETE "https://api.audiodelivery.net/v1/creator/CREATOR_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```
const response = await fetch('https://api.audiodelivery.net/v1/creator/CREATOR_ID', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  }
});

const data = await response.json();
```

```
import Foundation

func performRequest() async throws {
    var request = URLRequest(url: URL(string: "https://api.audiodelivery.net/v1/creator/CREATOR_ID")!)
    request.httpMethod = "DELETE"
    request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
    let (data, _) = try await URLSession.shared.data(for: request)
    let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
    // use json
}
```

```
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.*

val client = OkHttpClient()

suspend fun performRequest(): String = withContext(Dispatchers.IO) {
    val request = Request.Builder()
        .url("https://api.audiodelivery.net/v1/creator/CREATOR_ID")
        .delete()
        .addHeader("Authorization", "Bearer YOUR_API_KEY")
        .build()
    val response = client.newCall(request).execute()
    response.body?.string() ?: error("Empty response body")
}
```

```
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<Map<String, dynamic>> performRequest() async {
  final response = await http.delete(
    Uri.parse("https://api.audiodelivery.net/v1/creator/CREATOR_ID"),
    headers: {
      "Authorization": "Bearer YOUR_API_KEY",
    },
  );
  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw Exception('Request failed: ${response.statusCode}');
  }
  return jsonDecode(response.body) as Map<String, dynamic>;
}
```

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"creator_id": "uuid",
"deleted_creator": {
  "id": "uuid",
  "organization_id": "uuid",
  "folder_id": "uuid",
  "organization_index": "string",
  "metadata": {}
}
}
```

#### 409 — le créateur a des enfants

```
{
"ok": false,
"message": "Cannot delete creator with existing collections or tracks. Delete them first.",
"api_request_id": "uuid"
}
```
