Générez des vidéos, images et musiques depuis votre propre code
Créez une clé, envoyez une requête avec une authentification Bearer et interrogez la tâche jusqu'à ce que votre fichier soit prêt. Même modèles, tarifs, limites de forfait et remboursements que le studio NovaMotions AI, à partir d’un solde de crédits partagé.
https://novamotions.com/api/v1Démarrage rapide
Trois étapes pour passer de zéro à une vidéo terminée. Chaque requête est en HTTPS simple avec JSON, donc n’importe quel langage ou outil fonctionne.
- 1
Créer une clé
Ouvrez la page API dans votre compte et créez une clé. La clé complète est affichée une seule fois, stockez-la dans une variable d’environnement nommée API_KEY.
- 2
Soumettre une tâche
Envoyez le modèle, une description et les options éventuelles. Les crédits sont débités une fois à la soumission, et la réponse indique combien il en reste.
curl -X POST https://novamotions.com/api/v1/videos \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2-pro", "prompt": "Un travelling lent dans une rue néon pluvieuse la nuit, reflets sur l’asphalte mouillé, style cinématographique", "duration": 5, "resolution": "720p", "aspect_ratio": "16:9" }' - 3
Interroger jusqu’à ce que ce soit prêt
Vérifiez la tâche toutes les quelques secondes. Quand le statut est réussi, téléchargez le fichier depuis output_url. En cas d’échec, les crédits sont déjà remboursés sur votre solde.
TASK_ID=your_task_id while true do TASK=$(curl -s https://novamotions.com/api/v1/tasks/$TASK_ID -H "Authorization: Bearer $API_KEY") STATUS=$(echo "$TASK" | jq -r .status) echo "$STATUS" if [ "$STATUS" = "succeeded" ] || [ "$STATUS" = "failed" ] then echo "$TASK" | jq break fi sleep 5 done
Authentification
Envoyez votre clé dans l’en-tête Authorization de chaque requête. Les clés commencent par nm_live_ et appartiennent à un compte.
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json- URL de base
- Tous les points de terminaison sont sous https://novamotions.com/api/v1 et renvoient du JSON.
- Gardez les clés secrètes
- Appelez l’API depuis votre serveur, jamais depuis un navigateur ou une application mobile. Une clé révoquée cesse de fonctionner immédiatement.
- Un seul solde
- Les appels API dépensent les crédits du propriétaire de la clé, le même solde utilisé par le studio. Les limites du forfait par génération s’appliquent aussi.
- URLs des médias
- Les images, vidéos et audios que vous fournissez doivent être des URLs https publiques qui se chargent sans cookies ni connexion.
Liste des modèles
/api/v1/modelsTous les modèles servis par l’API, avec leurs modes, durées, résolutions, rapports d’aspect, support audio, limites de référence et leur prix le plus bas en crédits. Utilisez-le pour créer un sélecteur de modèles au lieu de coder en dur les options.
Requête
curl https://novamotions.com/api/v1/models \
-H "Authorization: Bearer $API_KEY"Réponse
{
"object": "list",
"data": [
{
"slug": "seedance-2-pro",
"name": "Seedance 2.0 Pro",
"kind": "video",
"endpoint": "/api/v1/videos",
"available": true,
"modes": [
"text-to-video",
"image-to-video",
"reference-to-video"
],
"durations": [
4,
5,
6,
8,
10,
12,
15
],
"default_duration": 5,
"resolutions": [
"480p",
"720p",
"1080p",
"4K"
],
"aspect_ratios": [
"16:9",
"9:16",
"1:1",
"4:3",
"3:4",
"21:9"
],
"audio": {
"supported": true,
"extra_credits": 20
},
"references": {
"images": 9,
"videos": 3,
"audio": 3,
"end_frame": true
},
"max_count": 4,
"prompt_max_length": 10000,
"from_credits": 35
}
]
}Vérifier le solde
/api/v1/balanceLes crédits que le propriétaire de la clé peut dépenser immédiatement, répartis en pools avec leurs dates d’expiration, plus le forfait actuel.
Requête
curl https://novamotions.com/api/v1/balance \
-H "Authorization: Bearer $API_KEY"Réponse
{
"object": "balance",
"balance": 1175,
"never_expiring": 375,
"next_expiry": "2026-11-17T00:00:00.000Z",
"pools": [
{
"source": "subscription",
"remaining": 800,
"granted": 2000,
"expires_at": "2026-11-17T00:00:00.000Z"
},
{
"source": "topup",
"remaining": 375,
"granted": 375,
"expires_at": null
}
],
"plan": {
"name": "Pro",
"status": "active",
"cycle": "monthly",
"renews_or_ends_at": "2026-11-14T00:00:00.000Z"
}
}Créer une vidéo
/api/v1/videosTexte en vidéo, image en vidéo (une image de départ et éventuellement une image de fin) ou référence vidéo (images, clips et audio qui guident le résultat). Le mode est choisi selon les entrées si vous le laissez vide.
Paramètres
modelstringObligatoireIdentifiant du modèle depuis le point de terminaison des modèles.promptstringObligatoireCe qui doit se passer dans le clip. Optionnel pour image-à-vidéo, où l’image de départ guide.modestringOptionneltexte-à-vidéo, image-à-vidéo ou référence-à-vidéo. Choisi selon vos entrées si laissé vide.durationintegerOptionnelDurée du clip en secondes. Doit être une des durées du modèle, sinon la valeur par défaut est utilisée.resolutionstringOptionnelRésolution de sortie comme 720p ou 1080p, issue de la liste du modèle.aspect_ratiostringOptionnel16:9, 9:16, 1:1, 4:3, 3:4 ou 21:9, depuis la liste du modèle. Par défaut 16:9.audiobooleanOptionnelGénérer une bande-son avec dialogues, effets et ambiance sur les modèles qui le supportent. Ajoute 20 crédits. Par défaut désactivé.image_urlstring (URL)OptionnelImage de départ pour la conversion image-vidéo.end_image_urlstring (URL)OptionnelImage de fin, sur les modèles qui supportent la première et dernière image.reference_image_urlsstring[]OptionnelImages de référence pour la conversion référence-vidéo, jusqu’à la limite du modèle.reference_video_urlsstring[]OptionnelClips de référence pour la conversion référence-vidéo, jusqu’à la limite du modèle.reference_audio_urlsstring[]OptionnelAudio guidant la bande-son, jusqu’à la limite du modèle.countintegerOptionnelNombre de vidéos à créer à partir de la même demande, de 1 à 4. Chaque vidéo est une tâche distincte et facturée séparément.seedintegerOptionnelGraine fixe pour des résultats reproductibles. Chaque élément supplémentaire dans un lot reçoit la graine suivante.
Requête
curl -X POST https://novamotions.com/api/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-pro",
"prompt": "Un travelling lent dans une rue néon pluvieuse la nuit, reflets sur l’asphalte mouillé, style cinématographique",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'Réponse
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 44,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 44,
"balance": 1131
}Créer des images
/api/v1/imagesTexte en image, ou modifier une image existante avec une description. Demandez jusqu’à quatre images par requête, chacune est une tâche distincte.
Paramètres
modelstringObligatoireIdentifiant du modèle depuis le point de terminaison des modèles.promptstringObligatoireCe que l’image doit montrer, ou comment modifier l’image fournie.modestringOptionneltexte-à-image ou édition d’image. Choisi parmi vos entrées si laissé vide.resolutionstringOptionnel1K, 2K ou 4K, depuis la liste du modèle.aspect_ratiostringOptionnelFormat d’image depuis la liste du modèle, incluant Auto sur les modèles qui le supportent.image_urlstring (URL)OptionnelImage à modifier. Obligatoire pour l’édition d’image.reference_image_urlsstring[]OptionnelImages de référence supplémentaires pour une édition, jusqu’à la limite du modèle.countintegerOptionnelImages par requête, de 1 à 4. Chaque image est une tâche distincte.seedintegerOptionnelGraine fixe pour des résultats reproductibles. Chaque élément supplémentaire dans un lot reçoit la graine suivante.
Requête
curl -X POST https://novamotions.com/api/v1/images \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Photo produit studio d’une tasse en céramique sur chêne, lumière douce de fenêtre, faible profondeur de champ",
"resolution": "1K",
"aspect_ratio": "1:1",
"count": 1
}'Réponse
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 3,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 3,
"balance": 1172
}Créer une chanson
/api/v1/musicUne chanson complète à partir d’une description, avec vos propres paroles ou en instrumental.
Paramètres
modelstringObligatoireIdentifiant du modèle depuis le point de terminaison des modèles.promptstringObligatoireGenre, ambiance, instruments et tempo de la chanson.durationintegerOptionnelDurée de la chanson en secondes, parmi les durées du modèle.lyricsstringOptionnelVos propres paroles. Laisser vide pour que le modèle les écrive.instrumentalbooleanOptionnelCréer une chanson sans voix. Par défaut désactivé.
Requête
curl -X POST https://novamotions.com/api/v1/music \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ai-music",
"prompt": "Hip-hop lo-fi chaleureux avec piano doux, crépitement de vinyle et groove relax de fin de soirée",
"duration": 60,
"instrumental": false
}'Réponse
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 11,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 11,
"balance": 1164
}Obtenir une tâche
/api/v1/tasks/{id}Interrogez une tâche par son id. Une fois le statut réussi, output_url pointe vers le fichier terminé. L’interrogation utilise la limite de lecture, elle ne consomme donc pas votre budget de soumission.
Requête
curl https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2 \
-H "Authorization: Bearer $API_KEY"Réponse
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"object": "task",
"kind": "video",
"model": "seedance-2-pro",
"mode": "text-to-video",
"status": "succeeded",
"progress": 100,
"prompt": "Un travelling lent dans une rue néon pluvieuse la nuit, reflets sur l’asphalte mouillé, style cinématographique",
"params": {
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": false,
"seed": null
},
"output_url": "https://novamotions.com/uploads/videos/2026/10/example.mp4",
"thumbnail_url": "https://novamotions.com/uploads/videos/2026/10/example.jpg",
"width": 1280,
"height": 720,
"duration_seconds": 5,
"credits": 44,
"refunded": false,
"error": null,
"created_at": "2026-10-18T09:30:00.000Z",
"completed_at": "2026-10-18T09:31:12.000Z"
}Lister les tâches
/api/v1/tasksTâches créées via l’API dans les 30 derniers jours, les plus récentes en premier, avec la même structure qu’une tâche unique. Passez next_cursor comme curseur pour charger la page suivante.
Paramètres
limitintegerOptionnelRésultats par page, de 1 à 50. Par défaut 20.cursorstringOptionnelLa valeur next_cursor de la page précédente.statusstringOptionnelUniquement les tâches avec ce statut : en attente, en cours, réussie ou échouée.
Requête
curl https://novamotions.com/api/v1/tasks?limit=20 \
-H "Authorization: Bearer $API_KEY"Réponse
{
"object": "list",
"data": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"object": "task",
"kind": "video",
"model": "seedance-2-pro",
"mode": "text-to-video",
"status": "succeeded",
"progress": 100,
"prompt": "Un travelling lent dans une rue néon pluvieuse la nuit, reflets sur l’asphalte mouillé, style cinématographique",
"params": {
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": false,
"seed": null
},
"output_url": "https://novamotions.com/uploads/videos/2026/10/example.mp4",
"thumbnail_url": "https://novamotions.com/uploads/videos/2026/10/example.jpg",
"width": 1280,
"height": 720,
"duration_seconds": 5,
"credits": 44,
"refunded": false,
"error": null,
"created_at": "2026-10-18T09:30:00.000Z",
"completed_at": "2026-10-18T09:31:12.000Z"
}
],
"next_cursor": null
}Statuts des tâches
Une tâche passe de en attente à en cours puis finit en réussie ou échouée. Arrêtez la consultation à l’un de ces états finaux.
queued- Acceptée et en attente d’une place de rendu. Continuez à consulter.
running- Rendu en cours. La progression va de 0 à 99.
succeeded- Terminé. output_url et thumbnail_url pointent vers les fichiers finis.
failed- Terminé sans résultat. error explique pourquoi et refunded est vrai, les crédits sont remboursés sur votre solde.
Codes d’erreur
Chaque erreur a la même structure. Branchez-vous sur le code et affichez un message compréhensible. Une tâche acceptée peut échouer plus tard, vérifiez son statut lors de la consultation.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this request. Top up or renew your plan, then retry.",
"needed": 44,
"balance": 14
}
}- 400
invalid_jsonLe corps n’est pas un objet JSON. - 401
unauthorizedPas de clé Bearer dans l’en-tête Authorization. - 401
invalid_api_keyLa clé n’existe pas ou est mal formée. - 401
key_revokedLa clé a été révoquée. Créez-en une nouvelle. - 402
insufficient_creditsCrédits insuffisants pour cette demande. La réponse indique le nécessaire et le solde. - 403
plan_limit_exceededLa demande dépasse la limite par génération du plan. Réduisez la durée ou la résolution. - 403
account_suspendedLe compte propriétaire de la clé est suspendu. - 403
api_disabledL’API est désactivée pour le moment. - 404
not_foundLa tâche ou le point d’accès n’existe pas sur ce compte. - 404
model_not_foundAucun modèle avec ce slug. Vérifiez le point d’accès des modèles. - 409
too_many_runningCe compte a déjà 3 tâches en cours. Attendez qu’une se termine. - 422
invalid_requestUn champ est manquant ou a un type incorrect. details liste chaque problème. - 422
wrong_endpointLe modèle appartient à un autre point d’accès, par exemple un modèle image envoyé aux vidéos. - 422
invalid_modeLe mode n’est pas reconnu par ce point d’accès. - 422
mode_not_supportedLe modèle ne supporte pas ce mode. - 422
prompt_requiredCe mode nécessite un prompt. - 422
image_requiredCe mode nécessite image_url. - 429
rate_limitedTrop de requêtes. Attendez le nombre de secondes indiqué dans Retry-After, puis réessayez. - 500
internal_errorUn problème est survenu de notre côté. Réessayez dans un instant. - 503
service_busyNous sommes à pleine capacité actuellement. Réessayez dans quelques minutes.
Crédits et remboursements
Facturé une fois, à la soumission
Chaque tâche coûte autant que les mêmes réglages dans le studio. La réponse à la soumission retourne credits_charged et votre nouveau solde. L’audio sur vidéo ajoute 20 crédits.
Remboursement complet des tâches échouées
Si une tâche échoue pour une raison quelconque, tous ses crédits retournent aux pools d’origine et la tâche affiche refunded à vrai. Rien à réclamer.
Limites du plan applicables
La limite par génération de votre plan s’applique aussi aux tâches API. Les crédits qui expirent le plus tôt sont dépensés en premier, les crédits d’appoint en dernier.
Limites de débit
Les limites sont comptées par clé sur une minute glissante. Au-delà, vous recevez un HTTP 429 avec un en-tête Retry-After en secondes. Chaque réponse porte les en-têtes X-RateLimit pour que vous puissiez ralentir avant cela.
- Soumettre
- 30 par minute
- Création de vidéos, images et chansons.
- Lecture
- 120 par minute
- Tâches, solde et modèles. Comptés séparément des soumissions.
- Exécution simultanée
- 3
- Tâches par compte en rendu en même temps.
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42Modèles
Les modèles que vous pouvez utiliser aujourd'hui avec leurs identifiants et leur prix le plus bas. Le point de terminaison des modèles renvoie la même liste avec toutes les options.
- Seedance 2.5
seedance-2-5Vidéo45 crédits - Seedance 2.0 Pro
seedance-2-proVidéo35 crédits - Seedance 2.0 Mini
seedance-2-miniVidéo24 crédits - Wan 3.0
wan-3Vidéo46 crédits - MiniMax H3
minimax-h3Vidéo30 crédits - Kling 3
kling-3Vidéo30 crédits - Seedance 1.5 Pro
seedance-1-5-proVidéo31 crédits - Seedance 1.0
seedance-1Vidéo32 crédits - Kling O3
kling-o3Vidéo46 crédits - Kling 2.6
kling-2-6Vidéo41 crédits - Wan 2.7
wan-2-7Vidéo35 crédits - Wan
wanVidéo32 crédits - Grok
grok-videoVidéo47 crédits - Veo 3
veo-3Vidéo42 crédits - GPT Image 2.5
gpt-image-2-5Image4 crédits - GPT Image 2
gpt-image-2Image3 crédits - Seedream 5 Pro
seedream-5-proImage4 crédits - Seedream 5
seedream-5Image3 crédits - Nano Banana Pro
nano-banana-proImage5 crédits - Nano Banana 2
nano-banana-2Image3 crédits - Nano Banana 2 Lite
nano-banana-2-liteImage2 crédits - AI Music
ai-musicMusique6 crédits
Prêt à créer ?
Créez une clé dans votre compte et envoyez votre première requête en une minute.