# Pistes | Docs AudioDN

> Points de terminaison API pour envoyer, mettre à jour, lister et supprimer des pistes audio. Gérez les métadonnées de piste, les images de couverture et les paramètres d

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

---

# Pistes

Les pistes sont des fichiers audio individuels au sein des collections. Gérez les métadonnées de piste, les envois, les informations de lecture et la suppression.

Les réponses incluent deux compagnons en lecture seule de `player_color` : `player_color_light` (ajusté pour rester lisible sur un fond clair) et `player_color_dark` (ajusté pour un fond sombre). Ils sont dérivés de `player_color` en décalant la luminosité jusqu’à ce que chacun atteigne un contraste minimum, afin que vous puissiez toujours afficher la couleur du lecteur sur l’un ou l’autre thème. Ils ne peuvent pas être définis directement.

GET `/v1/track/:track_id`

Renvoie les détails d'une piste spécifique

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `track_id` | uuid | Obligatoire | L'identifiant de la piste à récupérer (paramètre de chemin) |

#### Exemple de requête

    

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

```
const response = await fetch('https://api.audiodelivery.net/v1/track/TRACK_ID', {
  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/track/TRACK_ID")!)
    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/track/TRACK_ID")
        .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/track/TRACK_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",
"track_id": "uuid",
"track": {
  "id": "uuid",
  "organization_id": "uuid",
  "collection_id": "uuid",
  "creator_id": "uuid | null",
  "index": "string",
  "duration": 0,
  "file_name": "string",
  "file_name_original": "string | null",
  "info": {},
  "organization_index": "string | null",
  "order": 0,
  "metadata": {},
  "player_title": "string | null",
  "player_subtitle": "string | null",
  "player_color": "string | null",
  "player_color_light": "string | null",
  "player_color_dark": "string | null",
  "theme": [],
  "track_status_id": "string"
}
}
```

GET `/v1/collection/:collection_id/track`

Renvoie une liste de pistes dans une collection

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `collection_id` | uuid | Obligatoire | L'identifiant de la collection (paramètre de chemin) |
| `limit` | number | Facultatif | Nombre maximum de pistes à renvoyer |
| `offset` | number | Facultatif | Nombre de pistes à ignorer |

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"count": 0,
"tracks": [
  {
    "id": "uuid",
    "organization_id": "uuid",
    "collection_id": "uuid",
    "index": "string",
    "duration": 0,
    "file_name": "string",
    "order": 0,
    "metadata": {},
    "player_title": "string | null",
    "player_subtitle": "string | null",
    "player_color": "string | null",
    "player_color_light": "string | null",
    "player_color_dark": "string | null",
    "theme": [],
    "track_status_id": "string"
  }
]
}
```

POST `/v1/track`

Crée une nouvelle piste

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `collection_id` | uuid | Obligatoire | Identifiant de la collection à laquelle cette piste appartient. Requis sauf si la clé API est limitée à une collection. |
| `file_name` | string | Obligatoire | Nom de fichier original de la piste |
| `creator_id` | uuid | Facultatif | Identifiant du créateur |
| `organization_index` | string | Facultatif | Identifiant d'organisation pour la piste |
| `metadata` | object | Facultatif | Métadonnées d'organisation pour la piste |
| `is_cover_overridable` | boolean | Facultatif | Indique si la couverture de la piste peut être remplacée |
| `is_theme_overridable` | boolean | Facultatif | Indique si les couleurs d'image de la piste peuvent être remplacées |
| `player_title` | string | Facultatif | Titre à afficher dans le lecteur |
| `player_subtitle` | string | Facultatif | Sous-titre à afficher dans le lecteur |
| `player_color` | string | Facultatif | Couleur à utiliser dans le lecteur (hex) |

#### Exemple de requête

    

```
curl -X POST "https://api.audiodelivery.net/v1/track" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "collection_id": "COLLECTION_ID",
  "file_name": "my-audio-track.mp3",
  "player_title": "Track Title"
}'
```

```
const payload = {
  "collection_id": "COLLECTION_ID",
  "file_name": "my-audio-track.mp3",
  "player_title": "Track Title"
};

const response = await fetch('https://api.audiodelivery.net/v1/track', {
  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/track")!)
    request.httpMethod = "POST"
    request.setValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    let bodyJSON = """
{
  "collection_id": "COLLECTION_ID",
  "file_name": "my-audio-track.mp3",
  "player_title": "Track Title"
}
"""
    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 = """{
  "collection_id": "COLLECTION_ID",
  "file_name": "my-audio-track.mp3",
  "player_title": "Track Title"
}""".toRequestBody("application/json".toMediaType())
    val request = Request.Builder()
        .url("https://api.audiodelivery.net/v1/track")
        .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/track"),
    headers: {
      "Authorization": "Bearer YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: jsonEncode({
  "collection_id": "COLLECTION_ID",
  "file_name": "my-audio-track.mp3",
  "player_title": "Track Title"
}),
  );
  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",
"track_id": "uuid",
"track": {
  "id": "uuid",
  "organization_id": "uuid",
  "collection_id": "uuid",
  "index": "string",
  "duration": 0,
  "file_name": "string",
  "order": 0,
  "metadata": {},
  "player_title": "string | null",
  "player_subtitle": "string | null",
  "player_color": "string | null",
  "player_color_light": "string | null",
  "player_color_dark": "string | null",
  "theme": [],
  "track_status_id": "string"
},
"track_upload": {
  "method": "PUT",
  "upload_url": "string",
  "ttl": 3600,
  "expires_at": "string"
},
"track_cover_upload": {
  "method": "POST",
  "upload_url": "string",
  "ttl": 3600,
  "expires_at": "string"
}
}
```

PUT `/v1/track/:track_id`

Met à jour une piste existante

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `track_id` | uuid | Obligatoire | L'identifiant de la piste à mettre à jour (paramètre de chemin) |
| `creator_id` | uuid | Facultatif | Identifiant du créateur |
| `organization_index` | string | Facultatif | Identifiant d'organisation pour la piste |
| `title` | string | Facultatif | Titre de la piste |
| `metadata` | object | Facultatif | Métadonnées d'organisation |
| `is_cover_overridable` | boolean | Facultatif | Indique si la couverture de la piste peut être remplacée |
| `is_theme_overridable` | boolean | Facultatif | Indique si les couleurs d'image de la piste peuvent être remplacées |
| `player_title` | string | Facultatif | Titre à afficher dans le lecteur |
| `player_subtitle` | string | Facultatif | Sous-titre à afficher dans le lecteur |
| `player_color` | string | Facultatif | Couleur à utiliser dans le lecteur (hex) |

#### Réponse

```
{
"ok": true,
"api_request_id": "uuid",
"track_id": "uuid",
"track": {
  "id": "uuid",
  "organization_id": "uuid",
  "collection_id": "uuid",
  "index": "string",
  "duration": 0,
  "file_name": "string",
  "order": 0,
  "metadata": {},
  "player_title": "string | null",
  "player_subtitle": "string | null",
  "player_color": "string | null",
  "player_color_light": "string | null",
  "player_color_dark": "string | null",
  "theme": [],
  "track_status_id": "string"
}
}
```

DELETE `/v1/track/:track_id`

Supprime une piste de façon logicielle et cascade vers ses fichiers et variantes

#### Paramètres

| Nom | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `track_id` | uuid | Obligatoire | L'identifiant de la piste à supprimer (paramètre de chemin) |

Supprimer une piste **cascade** : ses variantes et fichiers sont aussi supprimés de façon logicielle, et les fichiers retirés sont mis en file pour suppression du stockage d’objets.

#### Exemple de requête

    

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

```
const response = await fetch('https://api.audiodelivery.net/v1/track/TRACK_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/track/TRACK_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/track/TRACK_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/track/TRACK_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",
"track_id": "uuid",
"deleted_track": {
  "id": "uuid",
  "organization_id": "uuid",
  "collection_id": "uuid",
  "index": "string",
  "duration": 0,
  "file_name": "string",
  "order": 0,
  "metadata": {},
  "player_title": "string | null",
  "player_subtitle": "string | null",
  "player_color": "string | null",
  "player_color_light": "string | null",
  "player_color_dark": "string | null",
  "theme": [],
  "track_status_id": "string"
}
}
```
