← ChansonMinute

Documentation API

L’API de ChansonMinute produit des chansons personnalisées par programme : vous envoyez une occasion et quelques détails, vous recevez un texte terminé et un enregistrement produit. HTTPS et JSON uniquement, aucun SDK obligatoire.

Mis à jour: 2026-09-16

Demander un accès

Les clés sont délivrées à la main. Un court message indiquant votre projet, le volume attendu et les langues suffit, et l’activation prend en général un jour ouvré.

Demander un accès

Introduction

L’API fait exactement ce que fait le site. Vous transmettez une occasion, le prénom de la personne dont parle la chanson et quelques détails concrets. Il en naît d’abord un texte complet, puis un enregistrement produit avec voix, arrangement et mixage. L’ensemble prend en général cinq à dix minutes.

Toutes les requêtes vont vers https://api.chansonminute.fr/v1. L’API ne parle que HTTPS, accepte du JSON et répond en JSON. Il n’existe aucun SDK obligatoire : n’importe quel langage capable de faire du HTTP convient. Les exemples de cette page utilisent curl, Python et Node, car ce sont les trois cas les plus fréquents.

Chaque domaine possède sa propre base API et son propre prix dans la monnaie locale. Une clé vaut pour le domaine pour lequel elle a été émise. Qui sert plusieurs marchés reçoit plusieurs clés ou une clé ouverte sur plusieurs domaines.

La facturation se fait par chanson terminée, actuellement 29,99 €. Les brouillons, les commandes annulées et les régénérations ne coûtent rien.

Accès

Il n’y a volontairement pas d’inscription automatique. Nous délivrons les clés à la main, parce que chaque chanson représente de vrais coûts de production et que nous voulons savoir à quoi sert l’intégration. En pratique, cela tient en un court message et un jour ouvré.

Écrivez à songs@maxkuch.com en indiquant quatre choses :

  • Ce que vous voulez construire, en deux ou trois phrases.
  • Le volume approximatif par mois.
  • Dans quelles langues les chansons doivent être chantées.
  • Si vous pouvez recevoir des webhooks ou si vous préférez interroger l’API.

Vous recevez deux clés : une clé de test préfixée sk_test_, gratuite, qui renvoie des enregistrements de démonstration fixes, et une clé live préfixée sk_live_. Les deux fonctionnent immédiatement, sans avoir à débloquer des points d’accès un par un.

Authentification

Chaque requête porte la clé dans l’en-tête Authorization sous forme de jeton bearer. Les requêtes sans en-tête valide reçoivent un 401 et le type d’erreur authentication_error.

bash Requête complète avec en-tête
curl https://api.chansonminute.fr/v1/songs \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "occasion": "birthday",
    "recipient_name": "Anna",
    "relationship": "sister",
    "language": "fr",
    "mood": "happy",
    "style": "pop",
    "voice": "female",
    "details": "Climbs every weekend, always ten minutes late, calls everyone chef.",
    "callback_url": "https://example.com/hooks/songs"
  }' 

Traitez la clé comme un mot de passe : côté serveur uniquement, jamais dans du code frontal, jamais dans un dépôt public. Si une clé s’égare, écrivez-nous : nous la bloquons aussitôt et en émettons une nouvelle. Un compte peut avoir plusieurs clés actives, le remplacement se fait donc sans interruption.

Les clés de test et live partagent les mêmes points d’accès. Le champ livemode de chaque objet indique si la requête s’est faite en mode test.

Démarrage rapide

Créer une chanson tient en un seul appel. La réponse arrive immédiatement et contient un identifiant au statut queued. Tout le reste se passe en arrière-plan.

python Créer et attendre l’aperçu (Python)
import os, time, requests

API = "https://api.chansonminute.fr/v1"
HEAD = {"Authorization": "Bearer " + os.environ["SONG_API_KEY"]}

song = requests.post(API + "/songs", headers=HEAD, json={
    "occasion": "wedding",
    "recipient_name": "Lea and Tim",
    "relationship": "friends",
    "language": "fr",
    "mood": "romantic",
    "details": "Met at a bike repair shop, dog named Miso, both terrible dancers.",
}).json()

while song["status"] not in ("preview_ready", "complete", "failed"):
    time.sleep(5)
    song = requests.get(API + "/songs/" + song["id"], headers=HEAD).json()

print(song["lyrics"])
print(song["preview_url"])

Pour la simplicité, l’exemple interroge l’API toutes les cinq secondes. En production, les webhooks sont la meilleure voie, car ils évitent la connexion ouverte et l’attente. Les deux sont possibles, les webhooks sont décrits plus bas.

Le champ décisif est details. C’est là que vont les choses concrètes sur la personne : le surnom, la manie, les vacances qui ont mal tourné. Des phrases générales comme « c’est quelqu’un de chaleureux » donnent des vers généraux. Trois à cinq détails concrets suffisent, et ils font la différence entre une chanson agréable et une chanson qui parle vraiment de quelqu’un.

Les points d’accès en bref

MéthodeCheminObjet
POST/v1/songsCommander une nouvelle chanson.
GET/v1/songs/{id}Récupérer une chanson avec tous ses champs à jour.
GET/v1/songsLister les chansons du compte, avec filtres et pagination.
GET/v1/songs/{id}/lyricsRécupérer uniquement le texte en texte brut.
GET/v1/songs/{id}/audioLien de téléchargement signé pour l’aperçu ou l’enregistrement complet.
POST/v1/songs/{id}/regenerateLancer une régénération gratuite.
POST/v1/songs/{id}/checkoutCréer une page de paiement pour le client final.
POST/v1/songs/{id}/unlockDébloquer la chanson directement et la facturer au compte.
GET/v1/optionsToutes les valeurs valides pour occasion, ambiance, style, voix et langue.
GET/v1/accountSolde, limites et domaines ouverts.
DELETE/v1/songs/{id}Annuler une chanson qui n’est pas encore terminée.

Créer une chanson

POST /v1/songs reçoit le brief et démarre aussitôt. Trois champs seulement sont obligatoires, tous les autres ont des valeurs par défaut raisonnables ou sont choisis selon l’occasion.

ChampTypeDescription
stringobligatoireL’occasion. Les valeurs valides viennent de /v1/options.
stringobligatoireLe prénom de la personne dont parle la chanson. Il est utilisé dans le texte.
stringobligatoireDétails concrets sur la personne, de 40 à 4000 caractères. Ce champ détermine la qualité du résultat.
stringfacultatifLe lien entre celui qui commande et celui qui reçoit, par exemple sœur, collègue, compagne.
stringfacultatifLa langue chantée. La valeur par défaut est fr.
stringfacultatifAmbiance générale. Sans indication, nous en choisissons une adaptée à l’occasion.
stringfacultatifStyle musical. Sans indication, nous en choisissons un adapté à l’occasion et à l’ambiance.
stringfacultatifVoix chantée. Sans indication, nous en choisissons une adaptée à l’occasion.
stringfacultatifUn message qui doit apparaître dans la chanson.
stringfacultatifTexte libre pour tout ce qui ne trouve pas sa place ailleurs, par exemple des souhaits de tempo.
stringfacultatifAdresse HTTPS vers laquelle envoyer les événements.
objectfacultatifPaires clé-valeur libres, 20 au maximum. Elles reviennent inchangées.
javascript Création avec clé d’idempotence (Node)
const res = await fetch("https://api.chansonminute.fr/v1/songs", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.SONG_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    occasion: "anniversary",
    recipient_name: "Mara",
    relationship: "partner",
    language: "fr",
    mood: "warm",
    details: "Ten years, three apartments, one very loud coffee machine.",
    callback_url: "https://example.com/hooks/songs",
    metadata: { order_id: "A-10423" },
  }),
});

const song = await res.json();
console.log(song.id, song.status);

L’appel ne coûte rien. Le paiement n’intervient qu’au déblocage via /unlock ou une session de paiement aboutie.

L’objet chanson

Tout point d’accès qui renvoie une chanson unique renvoie le même objet. Les champs qui n’existent pas encore valent null et se remplissent pendant la production.

json Juste après la création
{
  "id": "sng_3n8Kd2ZpQv",
  "object": "song",
  "status": "queued",
  "created_at": "2026-09-16T09:41:02Z",
  "occasion": "birthday",
  "recipient_name": "Anna",
  "relationship": "sister",
  "language": "fr",
  "mood": "happy",
  "style": "pop",
  "voice": "female",
  "lyrics": null,
  "preview_url": null,
  "audio_url": null,
  "duration_seconds": null,
  "paid": false,
  "price": { "amount": 2999, "currency": "EUR" },
  "metadata": {},
  "livemode": true
}
ChampTypeDescription
stringfacultatifIdentifiant unique, commence toujours par sng_.
stringfacultatifÉtat de production actuel, voir la section suivante.
stringfacultatifLe texte complet avec les marques de couplet et de refrain. Gratuit, même sans paiement.
stringfacultatifLes 45 premières secondes en MP3. Toujours disponibles, sans paiement.
stringfacultatifL’enregistrement complet en MP3, signé et valable 24 heures. Rempli seulement après paiement.
integerfacultatifDurée de l’enregistrement terminé en secondes, le plus souvent entre 120 et 240.
booleanfacultatifIndique si la chanson est débloquée.
objectfacultatifMontant dans la plus petite unité monétaire plus le code devise, ici 29,99 €.
objectfacultatifCe que vous avez transmis à la création, inchangé.
booleanfacultatiffalse si la requête s’est faite avec une clé de test.
json Après achèvement et paiement
{
  "id": "sng_3n8Kd2ZpQv",
  "object": "song",
  "status": "complete",
  "created_at": "2026-09-16T09:41:02Z",
  "completed_at": "2026-09-16T09:47:35Z",
  "lyrics": "[Verse 1]\nAnna, six in the morning, chalk on your hands ...",
  "preview_url": "https://cdn.chansonminute.fr/preview/sng_3n8Kd2ZpQv.mp3",
  "audio_url": "https://cdn.chansonminute.fr/full/sng_3n8Kd2ZpQv.mp3?expires=1789412855&sig=...",
  "duration_seconds": 184,
  "paid": true,
  "price": { "amount": 2999, "currency": "EUR" },
  "metadata": { "order_id": "A-10423" },
  "livemode": true
}

Valeurs de statut

Une chanson traverse ces états dans cet ordre. Elle ne revient jamais en arrière, et complete, failed et cancelled sont des états finaux.

StatutValeurSignification
queuedAcceptée, en attente d’une place de production libre. En général quelques secondes.
writing_lyricsLe texte est en cours d’écriture.
lyrics_readyLe texte est terminé et récupérable. Généralement après une à deux minutes.
generating_audioVoix, arrangement et mixage sont en production.
preview_readyLes 45 premières secondes sont disponibles et le fichier complet est prêt.
completePayée et livrée intégralement.
failedProduction définitivement échouée. Rien n’est facturé, le champ error indique la raison.
cancelledAnnulée avant l’achèvement.

Une tentative de production ratée ne mène pas directement à failed. En interne, nous réessayons plusieurs fois et n’abandonnons que si toutes les tentatives échouent. failed est donc rare et signifie vraiment : cette chanson n’arrivera pas.

Récupérer et lister

GET /v1/songs/{id} renvoie l’état actuel d’une chanson. Le point d’accès est léger et supporte d’être interrogé chaque seconde, tant que vous restez dans la limite de fréquence.

bash Lister avec filtre et curseur
curl -G https://api.chansonminute.fr/v1/songs \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -d status=complete \
  -d limit=20 \
  -d starting_after=sng_3n8Kd2ZpQv

Les listes fonctionnent par curseur. Vous recevez au plus limit entrées, 20 par défaut et 100 au maximum, les plus récentes d’abord. Si has_more est vrai, vous passez next_cursor comme starting_after à l’appel suivant. Vous pouvez filtrer sur status, occasion, language, paid ainsi que created_after et created_before.

json Réponse d’une liste
{
  "object": "list",
  "data": [
    { "id": "sng_9Wq1LmT4bR", "status": "complete", "recipient_name": "Jonas", "...": "..." },
    { "id": "sng_3n8Kd2ZpQv", "status": "complete", "recipient_name": "Anna",  "...": "..." }
  ],
  "has_more": true,
  "next_cursor": "sng_3n8Kd2ZpQv"
}

Texte et audio

Le texte est gratuit et complet, ce n’est pas un extrait. GET /v1/songs/{id}/lyrics le renvoie en text/plain, avec les marques de couplet et de refrain. Le même texte figure dans le champ lyrics de l’objet chanson.

Pour l’audio, il y a deux niveaux. L’aperçu correspond aux 45 premières secondes de l’enregistrement terminé, ce n’est pas une démo séparée : même voix, même arrangement, même texte. Il est disponible sans paiement et le reste. Le fichier complet est fourni par GET /v1/songs/{id}/audio, seulement après déblocage.

Les deux adresses sont signées et valables 24 heures. Elles servent au téléchargement, pas au lien permanent. Si vous avez besoin d’un fichier plus longtemps, téléchargez-le une fois et conservez-le. Un nouvel appel au point d’accès fournit à tout moment une adresse fraîche.

Le format est toujours du MP3 à 320 kbit/s. Qui a besoin de WAV ajoute ?format=wav, disponible pour les comptes avec l’option studio.

Régénérer

Si un résultat ne convainc pas, la régénération ne coûte rien. POST /v1/songs/{id}/regenerate crée une nouvelle version sous le même identifiant et remet le statut à queued. La version précédente reste sous previous_versions.

bash Régénération avec justification
curl https://api.chansonminute.fr/v1/songs/sng_3n8Kd2ZpQv/regenerate \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "keep_lyrics": false,
    "reason": "voice_not_matching",
    "note": "Please try a lower male voice and a slower tempo."
  }' 

Avec keep_lyrics: true, le texte reste et seul l’enregistrement est refait. C’est la bonne voie quand le texte fonctionne et que seule la voix ou le tempo n’allait pas. Avec false, le texte est aussi réécrit.

Le champ note entre directement dans la régénération, une phrase concrète est donc payante. « Voix masculine plus grave, plus lent » fonctionne, « fais mieux » non. Trois régénérations par chanson sont gratuites, au-delà parlez-nous-en.

Paiement et déblocage

Il y a deux façons de débloquer une chanson, selon qui paie.

Le client final paie

POST /v1/songs/{id}/checkout crée chez nous une page de paiement dans la monnaie du domaine, avec les moyens de paiement usuels du pays. Vous y envoyez le client et recevez l’événement song.paid quand le paiement aboutit.

bash Créer la page de paiement
curl https://api.chansonminute.fr/v1/songs/sng_3n8Kd2ZpQv/checkout \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "success_url": "https://example.com/thanks?song=sng_3n8Kd2ZpQv",
    "cancel_url": "https://example.com/cart"
  }' 
json Réponse
{
  "object": "checkout_session",
  "song": "sng_3n8Kd2ZpQv",
  "url": "https://pay.chansonminute.fr/c/cs_live_8Hd2Kq...",
  "amount": 2999,
  "currency": "EUR",
  "expires_at": "2026-09-16T11:41:02Z"
}

Vous payez

Sur les comptes à facturation groupée, POST /v1/songs/{id}/unlock débloque la chanson immédiatement et facture 29,99 € au compte. Pas de détour par une page de paiement, pratique quand vous avez votre propre caisse.

bash Débloquer directement
curl https://api.chansonminute.fr/v1/songs/sng_3n8Kd2ZpQv/unlock \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -X POST

Dans les deux cas, le même droit d’usage s’applique : non exclusif, mais expressément commercial. Vous pouvez transmettre, vendre et publier la chanson terminée dans le cadre de votre offre.

Valeurs valides

Les listes d’occasions, d’ambiances, de styles, de voix et de langues évoluent de temps en temps. Plutôt que de les écrire en dur, interrogez GET /v1/options et gardez la réponse en cache quelques heures.

json Réponse
{
  "object": "options",
  "language": "fr",
  "occasions": ["birthday", "wedding", "anniversary", "farewell", "funeral",
                "christening", "graduation", "christmas", "declaration", "other"],
  "moods":     ["happy", "warm", "funny", "romantic", "gentle", "epic", "surprise_me"],
  "styles":    ["pop", "rock", "folk", "schlager", "hiphop", "ballad", "country",
                "electronic", "jazz", "childrens", "surprise_me"],
  "voices":    ["female", "male", "duet", "choir", "childrens", "surprise_me"],
  "languages": ["de", "en", "dk", "nl", "it", "se", "fr", "es", "no", "pl", "fi", "is", "jp"]
}

Chacune de ces valeurs peut aussi être omise. La valeur surprise_me n’est pas un remplissage mais une vraie consigne : nous choisissons alors sciemment quelque chose qui colle à l’occasion et aux détails.

Webhooks

Indiquez une callback_url à la création et nous y envoyons chaque événement par POST. C’est la voie recommandée, elle évite les interrogations répétées et l’attente.

ÉvénementTypeDéclenché quand
song.lyrics_readyLe texte est terminé.
song.preview_readyL’aperçu de 45 secondes est disponible.
song.completedL’enregistrement complet a été livré.
song.failedLa production a définitivement échoué.
song.regeneratedUne régénération est prête.
song.paidLe paiement est arrivé, la chanson est débloquée.
json Exemple de charge utile
{
  "id": "evt_5Tb7Rn2WqX",
  "object": "event",
  "type": "song.completed",
  "created_at": "2026-09-16T09:47:35Z",
  "data": {
    "object": {
      "id": "sng_3n8Kd2ZpQv",
      "object": "song",
      "status": "complete",
      "audio_url": "https://cdn.chansonminute.fr/full/sng_3n8Kd2ZpQv.mp3?expires=1789412855&sig=...",
      "...": "..."
    }
  }
}

Vérifier la signature

Chaque livraison porte un en-tête avec horodatage et HMAC-SHA256 sur horodatage, point et corps brut. Vérifiez-le avant de faire confiance au contenu et rejetez tout ce qui a plus de cinq minutes.

http En-tête de signature
X-Song-Signature: t=1789412855,v1=7f2c1d9a4b6e8035c1f7a29d4e5b0c8371a6d2f94e8b3c07a15d9e2f6b4c8a01
python Vérification en Python
import hashlib, hmac, os, time
from flask import Flask, request, abort

SECRET = os.environ["SONG_WEBHOOK_SECRET"].encode()
app = Flask(__name__)


@app.post("/hooks/songs")
def hook():
    header = request.headers.get("X-Song-Signature", "")
    parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
    timestamp, signature = parts.get("t", ""), parts.get("v1", "")

    if abs(time.time() - int(timestamp or 0)) > 300:
        abort(400)  # older than five minutes, treat as replay

    expected = hmac.new(
        SECRET, (timestamp + "." + request.get_data(as_text=True)).encode(),
        hashlib.sha256,
    ).hexdigest()

    if not hmac.compare_digest(expected, signature):
        abort(400)

    event = request.get_json()
    if event["type"] == "song.completed":
        store(event["data"]["object"])

    return "", 200

Répétitions

Nous attendons une réponse 2xx dans les dix secondes. Si elle n’arrive pas, nous réessayons huit fois sur 24 heures avec des intervalles croissants. Les livraisons peuvent donc se répéter et, rarement, arriver dans le désordre : rendez votre point d’accès idempotent et fiez-vous à created_at, pas à l’heure d’arrivée.

Idempotence

Chaque POST accepte l’en-tête Idempotency-Key avec une valeur unique quelconque, le plus souvent un UUID. Si la même clé revient dans les 24 heures, nous renvoyons la réponse d’origine au lieu de créer une deuxième chanson.

bash Requête sûre en cas de répétition
curl https://api.chansonminute.fr/v1/songs \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Idempotency-Key: 9f1c7c2e-0a3b-4c8d-9e21-5f7a1b6c3d40" \
  -H "Content-Type: application/json" \
  -d '{ "occasion": "birthday", "recipient_name": "Anna", "language": "fr", "details": "..." }' 

C’est exactement la protection dont on a besoin contre les erreurs réseau : si une réponse se perd et que votre code répète la requête, il ne naît quand même qu’une seule chanson. Si vous envoyez la même clé avec un corps différent, nous répondons 409 avec le type d’erreur conflict.

Erreurs

Les erreurs arrivent toujours sous la même forme, avec un type et un code lisibles par la machine, un message lisible et, le cas échéant, le champ concerné. Joignez la request_id à toute demande de support, nous retrouvons ainsi l’appel dans les journaux.

json Objet erreur
{
  "error": {
    "type": "validation_error",
    "code": "details_too_short",
    "message": "details must contain at least 40 characters so the song has something to work with",
    "param": "details",
    "request_id": "req_2Lm9Xc4Kd1"
  }
}
TypeHTTPSignification
400invalid_requestLa requête est formellement cassée, par exemple du JSON invalide ou un champ inconnu.
401authentication_errorLa clé manque, a expiré ou est bloquée.
403permission_errorLa clé est valide mais n’est pas ouverte pour ce domaine ou ce point d’accès.
404not_foundL’identifiant demandé n’appartient pas à ce compte ou n’existe pas.
409conflictL’action ne correspond pas à l’état, par exemple débloquer une chanson annulée.
422validation_errorLa requête est formellement correcte mais une valeur est inexploitable, par exemple des détails trop courts.
429rate_limitTrop de requêtes ou trop de productions simultanées.
500api_errorErreur de notre côté. Réessayez avec des intervalles croissants.

Pour un 429 et les 5xx, réessayer a du sens, de préférence avec des intervalles exponentiels et un peu de hasard. Pour un 4xx autre que 429, non : la même requête échouera de nouveau.

Limites

LimiteValeurS’applique à
60 / minRequêtes par minute et par clé, tous points d’accès confondus.
10Productions simultanées. Les requêtes suivantes attendent en file.
64 KBTaille maximale du corps d’une requête.
40 - 4000Caractères dans le champ details, au minimum et au maximum.
90Jours pendant lesquels nous conservons chansons et données saisies, ensuite elles sont supprimées.
24 hDurée pendant laquelle une clé d’idempotence renvoie l’ancienne réponse.

Chaque réponse porte l’état actuel dans ses en-têtes, vous n’avez donc pas à deviner.

http En-têtes de limite
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1789412880
X-Concurrent-Limit: 10
X-Concurrent-Running: 3

Des limites plus élevées ne posent pas de problème, ce n’est simplement pas le réglage de départ. Si le volume grandit, écrivez-nous deux lignes et nous les relevons.

Versionnement

La version majeure figure dans le chemin et reste stable. À l’intérieur de v1, seules des modifications additives arrivent : nouveaux champs, nouvelles valeurs dans les listes, nouveaux points d’accès. Les champs existants ne disparaissent pas et ne changent pas de sens.

Pour plus de sûreté, vous pouvez fixer une date dans un en-tête. Sans en-tête, c’est toujours le comportement le plus récent qui s’applique.

http Fixer la version
X-Song-Version: 2026-09-01

Votre code devrait ignorer les champs inconnus dans les réponses plutôt que de casser. C’est la seule hypothèse que nous faisons sur les clients.

Mode test

Les clés préfixées sk_test_ passent exactement par les mêmes points d’accès, mais ne lancent aucune production réelle et ne coûtent rien. Après quelques secondes, vous recevez un texte de démonstration fixe et un enregistrement de démonstration, et chaque objet porte livemode: false.

Cela permet aussi d’éprouver les cas désagréables. Certains prénoms dans le champ recipient_name forcent une issue précise : test_fail mène à failed, test_slow à une production d’environ dix minutes, test_ratelimit à une réponse 429. Vous pouvez donc tester votre gestion des erreurs sans attendre une vraie panne.

Les webhooks fonctionnent aussi en mode test, avec le même mécanisme de signature et un secret dédié.

Droits et données

Avec le déblocage, vous obtenez un droit d’usage non exclusif mais expressément commercial sur la chanson terminée. Vous pouvez la transmettre, la vendre, l’exécuter en public et l’intégrer à votre produit. Non exclusif signifie que nous conservons le droit d’utiliser nous-mêmes l’enregistrement, par exemple comme exemple.

Sur le droit d’auteur de la musique créée par intelligence artificielle, beaucoup d’ordres juridiques n’ont pas encore de réponse définitive. Nous vous garantissons l’usage par contrat, mais ne pouvons pas assurer qu’un droit d’auteur propre naisse sur l’enregistrement et tienne face à des tiers. Qui en dépend devrait faire vérifier la question en amont.

Nous conservons les données saisies et les chansons terminées 90 jours, ensuite elles sont supprimées. Pour supprimer une chanson plus tôt, il y a DELETE /v1/songs/{id}. Les informations de details ne servent qu’à produire cette chanson et jamais à entraîner nos propres modèles.

Si vous nous transmettez les données de vos clients, vous êtes responsable du traitement et nous sous-traitant. Un accord de sous-traitance est disponible sur demande.

Assistance

Questions, limites plus élevées, accord de sous-traitance, cas particuliers : songs@maxkuch.com. Pour les problèmes techniques, indiquez la request_id de la réponse d’erreur, nous retrouvons l’appel immédiatement.

Pour les intégrations via des agents d’intelligence artificielle, il existe aussi un serveur Model Context Protocol, documenté sur /mcp/, qui utilise les mêmes clés que l’API REST.

Demander un accès

Les clés sont délivrées à la main. Un court message indiquant votre projet, le volume attendu et les langues suffit, et l’activation prend en général un jour ouvré.

Demander un accès