# Génération de musique

> Générez une chanson à partir d’une description, ou faites reprendre un morceau que vous avez déjà, en job asynchrone facturé au morceau.

- Canonical: https://tchavi.com/fr/docs/music-generation

---


<Endpoint method="POST" path="/v1/music/generations" />

La génération de musique est asynchrone : l'endpoint renvoie immédiatement un `202` avec un `id` de job, et le morceau se fabrique en arrière-plan. Interrogez `GET /v1/jobs/:id` (voir [Jobs asynchrones](/fr/docs/jobs)) jusqu'à ce que `status` passe à `completed` ou `failed`. Le helper `createAndWait(...)` du SDK fait les deux en un appel.

**La facturation est forfaitaire, au morceau.** Le modèle a produit le fichier ou non, et cinq minutes coûtent le prix de trente secondes — il n'y a pas de paramètre de durée et rien à régulariser ensuite. Si un job échoue après facturation, les crédits sont intégralement remboursés.

| Modèle                | Ce qu'il fait                                                          | Crédits par morceau |
| --------------------- | ---------------------------------------------------------------------- | ------------------- |
| `minimax-music-2.6`   | Écrit et interprète une chanson d'après une description, jusqu'à 5 min | 329,242             |
| `minimax-music-cover` | Reprend un morceau que vous fournissez, dans le style décrit           | 658,484             |

## Générer une chanson

```bash
curl https://tchavi.com/api/v1/music/generations \
  -H "Authorization: Bearer $TCHAVI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-music-2.6",
    "prompt": "Afrobeats mid-tempo, guitare highlife et basse ronde, refrain joyeux"
  }'
```

```json
{
  "id": "0f3c…",
  "object": "music.generation",
  "status": "pending",
  "model": "minimax-music-2.6",
  "created_at": "2026-11-04T22:41:07.812Z",
  "tchavi": {
    "credits_used": 329.242,
    "credits_remaining": 4821.5
  }
}
```

Interrogez ensuite `GET /v1/jobs/0f3c…` jusqu'à la fin. Un job de musique terminé répond avec `output.audio_url` — et non `video_url`, réservé à la vidéo — sans `duration` ni `resolution`, que la musique n'a pas à choisir.

## Reprendre un morceau existant

`minimax-music-cover` garde la mélodie et change tout ce qui l'entoure — genre, voix, instruments, arrangement. Il **exige** `source_audio_url`, un MP3 ou un WAV accessible publiquement ; une requête sans source est refusée avant toute facturation.

```bash
curl https://tchavi.com/api/v1/music/generations \
  -H "Authorization: Bearer $TCHAVI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-music-cover",
    "prompt": "Version acoustique douce, voix féminine, guitare nylon",
    "source_audio_url": "https://example.com/ma-maquette.mp3"
  }'
```

## Paramètres

| Champ              | Type    | Remarques                                                                               |
| ------------------ | ------- | --------------------------------------------------------------------------------------- |
| `model`            | string  | Obligatoire.                                                                            |
| `prompt`           | string  | Obligatoire. Le style et l'ambiance voulus. 2 000 caractères au plus.                   |
| `lyrics`           | string  | Les paroles à chanter. Omis, un générateur écrit les siennes. 5 000 caractères au plus. |
| `instrumental`     | boolean | Aucune voix. Générateurs uniquement, et jamais avec `lyrics`.                           |
| `source_audio_url` | string  | Le morceau à reprendre. Exigé par `minimax-music-cover`, refusé par les générateurs.    |

Trois combinaisons sont refusées avant toute facturation, parce que chacune demande au modèle quelque chose qu'il ne peut pas faire : une reprise sans `source_audio_url`, un `source_audio_url` envoyé à un générateur, et `instrumental` avec `lyrics` — l'un demande l'absence de voix, l'autre fournit les mots.

## Avec le SDK

```ts
import Tchavi from '@tchavi/sdk';

const client = new Tchavi({ apiKey: process.env.TCHAVI_API_KEY });

// Soumet et interroge en un seul appel.
const job = await client.music.generations.createAndWait({
  model: 'minimax-music-2.6',
  prompt: 'Afrobeats mid-tempo, guitare highlife, refrain joyeux',
});

console.log(job.status, job.output?.audio_url);
```

## Ce que vous ne contrôlez pas

Vous ne choisissez pas la durée — le modèle décide, dans la limite de cinq minutes — et vous ne pouvez pas demander une voix précise. Personne ne peut garantir qu'un morceau généré ne ressemble à aucune musique existante, et reprendre un enregistrement qui ne vous appartient pas peut en violer les droits : le modèle ne vérifie pas, et nous non plus.

