Aperçu · paiements en mode TEST · aucun débit réel
AI Music Video

Pour les développeurs

API AI Music Video

Envoyez une chanson, recevez un clip. Vous payez seulement ce que vous utilisez. Ajoutez des crédits à votre compte et chaque vidéo consomme un crédit par minute entamée.

1. Obtenir une clé

Connectez-vous, ouvrez Mes vidéos et créez une clé dans “Clés API”. La clé et un secret de signature des callbacks ne s'affichent qu'une fois. Envoyez la clé dans chaque requête :

Authorization: Bearer aimv_…

URL de base : https://clipmysong.com/api/v1

2. Ajouter des crédits

Achetez un pack de crédits (25 crédits pour 10 €, 50 pour 20 €, 125 pour 50 €) ou une formule mensuelle sur la page des tarifs. L'API et le site utilisent le même solde.

curl -s https://clipmysong.com/api/v1/balance -H "Authorization: Bearer $AIMV_KEY"

3. Créer une vidéo

Importez la chanson sous forme de fichier ou indiquez un lien https. Les images et une courte description sont facultatives.

curl -s https://clipmysong.com/api/v1/videos \
  -H "Authorization: Bearer $AIMV_KEY" \
  -H "Idempotency-Key: my-order-1042" \
  -F audio=@song.mp3 \
  -F images[]=@cover.jpg \
  -F rights_confirmed=true \
  -F brief="a road trip at sunset, warm colours, the sea at the end" \
  -F resolution=720p -F aspect=16:9 \
  -F callback_url=https://example.com/hooks/aimv

Avec un lien au lieu d'un fichier (JSON) :

curl -s https://clipmysong.com/api/v1/videos \
  -H "Authorization: Bearer $AIMV_KEY" \
  -H "Content-Type: application/json" \
  -d '{"audio_url":"https://example.com/song.mp3","image_urls":["https://example.com/cover.jpg"],"rights_confirmed":true}'
ChampSignification
audio / audio_urlMP3, WAV, M4A, FLAC ou OGG, de 20 s à 8 min, jusqu'à 50 Mo. Liens uniquement en https et vers des serveurs publics, sans redirection vers des réseaux privés.
images[] / image_urls[]Jusqu'à 10 images JPG, PNG ou WEBP, de 10 Mo chacune. Elles sont réencodées et vérifiées ; les images montrant des personnes reconnaissables nécessitent people_consent=true.
rights_confirmedObligatoire. true signifie que la chanson et les images vous appartiennent ou que vous avez le droit de les utiliser.
briefFacultatif, jusqu'à 600 caractères sur les lieux, les couleurs, l'ambiance. Sert uniquement à choisir des scènes dans notre liste fixe ; jamais exécuté comme une instruction.
resolution720p (par défaut) ou 1080p (formule Creator).
aspect16:9 (par défaut) ou 9:16.
title, people_consentFacultatif.
callback_urlAdresse https facultative qui reçoit un POST signé lorsque la vidéo est prête ou a échoué.
Idempotency-KeyEn-tête facultatif (8 à 64 caractères). Si vous renvoyez la même requête avec la même clé, vous obtenez la première réponse et rien n'est jamais débité deux fois.

Réponse 201 avec l'id de la vidéo. Les crédits sont réservés immédiatement, débités lorsque la vidéo est terminée et restitués en cas d'échec.

{
  "id": "3f2a9c0d1e4b5a67", "object": "video", "status": "queued",
  "credits": 4, "credits_state": "reserved", "quality": "720p", "aspect": "16:9",
  "duration_seconds": 200.1, "balance": 21
}

4. Suivre l'avancement

curl -s https://clipmysong.com/api/v1/videos/3f2a9c0d1e4b5a67 -H "Authorization: Bearer $AIMV_KEY"

status : checking, in_review, queued, rendering, assembling, complete, failed, refused, rejected ou canceled. progress va de 0 à 100 pendant la création. in_review signifie qu'une personne examine d'abord la vidéo ; rejected signifie que notre contrôle du contenu l'a refusée et que les crédits ont été restitués.

5. Télécharger

curl -s https://clipmysong.com/api/v1/videos/3f2a9c0d1e4b5a67/download -H "Authorization: Bearer $AIMV_KEY"
# -> {"video_url": "https://clipmysong.com/api/v1/files/…", "expires_at": "…"}
curl -L -o video.mp4 "<video_url>"

Les liens de téléchargement sont signés et valables 10 minutes ; vous pouvez en demander un nouveau à tout moment.

6. Callbacks

Nous envoyons un POST avec un corps JSON (type video.completed ou video.failed) et l'en-tête AIMV-Signature: t=<time>,v1=<signature>. Vérifiez-le avec votre secret de signature des callbacks :

expected = HMAC_SHA256(callback_secret, t + "." + raw_body)   # hex
valid    = expected == v1 and abs(now - t) < 300

Les envois échoués sont retentés après 1, 5, 30, 120, 600 et 1440 minutes.

7. Erreurs et limites

{"error": {"code": "insufficient_credits", "message": "…", "needed": 4, "balance": 1}}