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}' | Champ | Signification |
|---|---|
audio / audio_url | MP3, 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_confirmed | Obligatoire. true signifie que la chanson et les images vous appartiennent ou que vous avez le droit de les utiliser. |
brief | Facultatif, 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. |
resolution | 720p (par défaut) ou 1080p (formule Creator). |
aspect | 16:9 (par défaut) ou 9:16. |
title, people_consent | Facultatif. |
callback_url | Adresse https facultative qui reçoit un POST signé lorsque la vidéo est prête ou a échoué. |
Idempotency-Key | En-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}} - 401 clé incorrecte ou révoquée · 402 crédits insuffisants · 404 vidéo inconnue · 409 pas encore prête ou conflit d'idempotence · 422 données invalides · 429 trop de requêtes (voir Retry-After).
- Limites par clé de 120 requêtes par minute et 20 nouvelles vidéos par heure, avec seulement quelques vidéos en cours de création en même temps.
- Les nouvelles vidéos peuvent attendre une vérification manuelle avant de partir vers les serveurs de rendu.