# Intégration côté serveur | Docs AudioDN

> Utilisez l

Source: https://audiodeliverynetwork.com/fr/docs/integration/server-side/

---

# Intégration côté serveur

Utilisez l’API ADN directement pour stocker des pistes et gérer la lecture. Créez des expériences entièrement personnalisées sans les composants ADN.

#### Idéal pour

Plateformes personnalisées, entreprise, et équipes ayant besoin d’un contrôle API complet. La configuration prend 1 à 2 heures.

## Lecture des pistes

Créez des sessions de lecture et récupérez les URL de piste depuis votre serveur.

Utilisez l’API ADN directement depuis votre serveur pour créer des sessions de lecture et récupérer les URL de piste. Créez des expériences de lecture entièrement personnalisées — sans composants web ADN.

### 1\. Créer une clé API

Allez dans **Settings → API Keys** et créez une clé **API Access**.

### 2\. Créer une session de lecture

```
const response = await fetch('https://api.audiodelivery.net/v1/play_session/collection', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    collection_id,
    variants: ['preview'],
    is_downloadable: false,
    expires_in: 3600 // session duration in seconds (default: 3600, min: 60, max: 86400)
  })
});

const { play_session_id, tracks } = await response.json();
```

C’est ici que vous appliquez la logique métier — vérifiez les abonnements, validez les achats, ou appliquez des règles d’accès avant de créer la session.

### 3\. Récupérer les données de piste

```
const { id: track_id } = tracks[0];

// No auth needed - the session ID acts as a bearer token
const response = await fetch(`https://api.audiodelivery.net/v1/play/${play_session_id}/${track_id}`);

const { variants } = await response.json();
const preview = variants.find(v => v.variant.index === 'preview');
console.log(`Play Audio File: ${preview.url}`);
```

### 4\. Lecture personnalisée

Utilisez l’URL renvoyée dans votre propre implémentation de lecteur audio. Compatible avec n’importe quelle bibliothèque de lecteur ou API audio mobile native.

#### Données de forme d'onde

ADN génère automatiquement des données de forme d’onde RMS normalisées (320 échantillons) pour chaque piste. Le champ `levels` dans la réponse de la piste contient les données — utilisez-les pour afficher des formes d’onde dans votre propre lecteur, ou générez des formes d’onde personnalisées via le type de variante Analyse audio.

#### Images de couverture et couleurs de thème

ADN scanne chaque piste envoyée pour une pochette intégrée et la rend disponible comme `cover_image` dans la réponse de la piste (en tailles icon/small/regular/large). Vous pouvez aussi envoyer une image de couverture séparément via l’API. Lorsqu’une image de couverture est présente, ADN extrait une palette de couleurs et sélectionne un `player_color` principal — utilisez-les pour styliser l’interface de votre lecteur. À côté, les réponses incluent `player_color_light` et `player_color_dark`, des variantes ajustées en contraste pour afficher la couleur sur des fonds clairs et sombres respectivement. Le tableau `theme` complet contient toutes les couleurs extraites avec les valeurs hexadécimales, l’aire, la luminosité et les données de saturation.

#### Pistes publiques ? Ignorez la session

Pour les pistes publiquement disponibles, vous pouvez signer les URL de livraison sur votre propre serveur avec une clé URL Signing et ignorer entièrement les sessions de lecture — pas d’aller-retour API par auditeur. Voir la voie rapide [Livraison signée](/docs/integration/signed-delivery) et l’[API Signing Keys](/docs/api/signing-keys).

## Envoi des pistes

Utilisez l’API ADN pour gérer tout le flux d’envoi depuis votre serveur.

Utilisez l’API ADN directement depuis votre serveur pour créer des sessions d’envoi, stocker des pistes et gérer tout le flux d’envoi. Créez des interfaces d’envoi entièrement personnalisées — sans composants web ADN.

### 1\. Créer une clé API

Allez dans **Settings → API Keys** et créez une clé **API Access**.

### 2\. Créer une session d'envoi

```
const response = await fetch('https://api.audiodelivery.net/v1/upload_session', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    collection_id: 'COLLECTION-ID',
    expires_in: 3600 // session duration in seconds (default: 3600, min: 60, max: 86400)
    // Optional: add track: { file_name: 'song.wav' } to also create a track and get track_upload.upload_url
  })
});

const { upload_session } = await response.json();
```

### 3\. Créer des pistes dans la session

```
const { id: upload_session_id } = upload_session;

// One request per file. No Authorization header needed here — the
// upload session ID authorizes track creation.
const response = await fetch(`https://api.audiodelivery.net/v1/upload/${upload_session_id}/track`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ file_name: 'song.wav' })
});

const { track_id, track_upload } = await response.json();
const { method, upload_url, expires_at } = track_upload;
```

### 4\. Envoyer les fichiers

```
const file = document.querySelector('input[type="file"]').files[0];

await fetch(upload_url, {
  method,
  headers: { 'Content-Type': file.type },
  body: file
});
```

Répétez les étapes 3 et 4 pour chaque fichier que vous souhaitez ajouter à la session — chaque piste a besoin de sa propre requête `POST /v1/upload/:upload_session_id/track` et de sa propre URL d’envoi signée. Vous pouvez aussi inclure un objet `track` imbriqué sur `POST /v1/upload_session` pour créer la première piste d’emblée, puis utiliser l’étape 3 pour tout fichier supplémentaire.

### 5\. Attendre que la piste soit prête

Le traitement démarre automatiquement une fois que le fichier est dans le stockage. Attendez que le statut de la piste soit `ready` avant de créer une session de lecture ou de signer des URL de livraison — soit en interrogeant, soit avec un webhook.

```
// Processing runs automatically after the upload. Poll the track until it is
// ready, or configure a webhook (below) to be notified instead of polling.
let track;
do {
  await new Promise((r) => setTimeout(r, 5000));
  const res = await fetch(`https://api.audiodelivery.net/v1/track/${track_id}`, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
  });
  ({ track } = await res.json());
} while (track.track_status_id !== 'ready');

// The track is now ready — create a play session or sign a delivery URL.
```

### 6\. Optionnel : Webhooks

Au lieu d’interroger, activez un webhook sous **Settings → Webhook** pour être notifié lorsqu’une piste atteint un résultat terminal (`ready`, `incomplete`, `error` ou `init_error`) et lorsque son jeu de fichiers complet est prêt. Voir la documentation du [webhook Track Processing](/docs/webhooks/track-processing).

#### Images de couverture

ADN scanne automatiquement les pistes envoyées pour une pochette intégrée. Vous pouvez aussi envoyer une image de couverture séparément via l’API Covers. Lorsqu’une image est présente, ADN extrait des couleurs (disponibles comme `theme`) qui peuvent être utilisées pour styliser l’interface de votre lecteur.

## Génération de clés

Générez des clés côté client limitées depuis votre serveur.

Une fois que vous avez une clé **API Access**, vous pouvez générer des clés `player` et `uploader` de façon programmatique — par exemple, une clé lecteur par client limitée à une seule collection. Les clés **Inline Share** et **URL Signing** ne sont pas créées via l’API ; provisionnez-les depuis **Settings → API Keys** dans le tableau de bord. Voir la référence [Clés API](/docs/api/api-keys) pour tous les paramètres.

### Créer une clé limitée

```
// Use your API Access key to mint a scoped Client-Side Player key.
const response = await fetch('https://api.audiodelivery.net/v1/api_key', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_ACCESS_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    title: 'Customer Player Key',
    api_key_type_id: 'player',   // 'player' | 'uploader' (share & signing keys are dashboard-only)
    collection_id: 'COLLECTION_ID' // optional: limit the key to one collection
    // expires_at is optional via the API — omit for a key that never expires
  })
});

// The full key is returned once — store it securely, it cannot be retrieved again.
const { api_key } = await response.json();
```

Via l’API, `expires_at` est optionnel pour les deux types de clés — omettez-le pour une clé qui n’expire jamais dans le temps. Les clés API Access, Inline Share et URL Signing doivent être créées dans le tableau de bord.
