# Creators | Docs de AudioDN

> Endpoints de la API para crear, actualizar, listar y eliminar creators en AudioDN. Los creators son subcuentas bajo tu organización usadas para clasificar colecciones y pistas y medir el uso por creator.

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

---

# Creators

Un creator es una subcuenta bajo tu organización, que suele representar a un contribuidor individual de contenido como un artista o podcaster. Los creators se usan para clasificar colecciones y pistas, situarlas en una carpeta de almacenamiento dedicada y medir el uso a un nivel granular. Una vez que existe un creator, pasa su `creator_id` al crear colecciones, pistas o sesiones de subida para asociarlos a ese creator.

El `organization_index` es tu propio identificador externo del creator (por ejemplo, el ID del creator en tu sistema). Es obligatorio al crear un creator y puede usarse para resolver el creator más tarde si no tienes a mano el `creator_id` de AudioDN.

GET `/v1/creator`

Devuelve una lista de creators de una organización

#### Parámetros

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `limit` | number | Opcional | Número máximo de creators a devolver |
| `offset` | number | Opcional | Número de creators a omitir |

#### Ejemplo de solicitud

    

```
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>;
}
```

#### Respuesta

```
{
"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`

Devuelve detalles de un creator concreto

#### Parámetros

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `creator_id` | uuid | Obligatorio | El ID del creator a recuperar (parámetro de ruta) |

#### Respuesta

```
{
"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`

Crea un nuevo creator

#### Parámetros

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `organization_index` | string | Obligatorio | Tu identificador externo del creator (el identificador del servicio remoto) |
| `metadata` | object | Opcional | Metadatos de organización del creator |

#### Ejemplo de solicitud

    

```
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>;
}
```

#### Respuesta

```
{
"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"
}
}
```

Crear un creator también aprovisiona una carpeta de almacenamiento dedicada y la vincula vía `folder_id`. Las colecciones y pistas creadas con este `creator_id` se almacenan en la misma carpeta.

PUT `/v1/creator/:creator_id`

Actualiza un creator existente

#### Parámetros

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `creator_id` | uuid | Obligatorio | El ID del creator a actualizar (parámetro de ruta) |
| `organization_index` | string | Opcional | Tu identificador externo del creator |
| `metadata` | object | Opcional | Metadatos de organización del creator |

#### Respuesta

```
{
"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`

Elimina suavemente un creator (solo cuando no tiene colecciones ni pistas sin eliminar)

#### Parámetros

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `creator_id` | uuid | Obligatorio | El ID del creator a eliminar (parámetro de ruta) |

Los creators nunca propagan. Si el creator aún tiene colecciones o pistas sin eliminar, la solicitud se rechaza con `409` — elimínalas primero. Cuando no quedan hijos sin eliminar, la carpeta de almacenamiento del creator se elimina suavemente junto con el creator.

#### Ejemplo de solicitud

    

```
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>;
}
```

#### Respuesta

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

#### 409 — el creator tiene hijos

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