API publique

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é.

URL de basehttps://novamotions.com/api/v1

Dé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. 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. 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. 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.

HTTP
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

GET/api/v1/models

Tous 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

JSON
{
  "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

GET/api/v1/balance

Les 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

JSON
{
  "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

POST/api/v1/videos

Texte 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

  • modelstring
    ObligatoireIdentifiant du modèle depuis le point de terminaison des modèles.
  • promptstring
    ObligatoireCe qui doit se passer dans le clip. Optionnel pour image-à-vidéo, où l’image de départ guide.
  • modestring
    Optionneltexte-à-vidéo, image-à-vidéo ou référence-à-vidéo. Choisi selon vos entrées si laissé vide.
  • durationinteger
    OptionnelDurée du clip en secondes. Doit être une des durées du modèle, sinon la valeur par défaut est utilisée.
  • resolutionstring
    OptionnelRésolution de sortie comme 720p ou 1080p, issue de la liste du modèle.
  • aspect_ratiostring
    Optionnel16:9, 9:16, 1:1, 4:3, 3:4 ou 21:9, depuis la liste du modèle. Par défaut 16:9.
  • audioboolean
    OptionnelGé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.
  • countinteger
    OptionnelNombre 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.
  • seedinteger
    OptionnelGraine 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

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 44,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 44,
  "balance": 1131
}

Créer des images

POST/api/v1/images

Texte 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

  • modelstring
    ObligatoireIdentifiant du modèle depuis le point de terminaison des modèles.
  • promptstring
    ObligatoireCe que l’image doit montrer, ou comment modifier l’image fournie.
  • modestring
    Optionneltexte-à-image ou édition d’image. Choisi parmi vos entrées si laissé vide.
  • resolutionstring
    Optionnel1K, 2K ou 4K, depuis la liste du modèle.
  • aspect_ratiostring
    OptionnelFormat 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.
  • countinteger
    OptionnelImages par requête, de 1 à 4. Chaque image est une tâche distincte.
  • seedinteger
    OptionnelGraine 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

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 3,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 3,
  "balance": 1172
}

Créer une chanson

POST/api/v1/music

Une chanson complète à partir d’une description, avec vos propres paroles ou en instrumental.

Paramètres

  • modelstring
    ObligatoireIdentifiant du modèle depuis le point de terminaison des modèles.
  • promptstring
    ObligatoireGenre, ambiance, instruments et tempo de la chanson.
  • durationinteger
    OptionnelDurée de la chanson en secondes, parmi les durées du modèle.
  • lyricsstring
    OptionnelVos propres paroles. Laisser vide pour que le modèle les écrive.
  • instrumentalboolean
    OptionnelCré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

JSON
{
  "tasks": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "status": "queued",
      "credits": 11,
      "url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
    }
  ],
  "credits_charged": 11,
  "balance": 1164
}

Obtenir une tâche

GET/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

JSON
{
  "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

GET/api/v1/tasks

Tâ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

  • limitinteger
    OptionnelRésultats par page, de 1 à 50. Par défaut 20.
  • cursorstring
    OptionnelLa valeur next_cursor de la page précédente.
  • statusstring
    OptionnelUniquement 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

JSON
{
  "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.

Réponse d’erreur
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonLe corps n’est pas un objet JSON.
  • 401unauthorizedPas de clé Bearer dans l’en-tête Authorization.
  • 401invalid_api_keyLa clé n’existe pas ou est mal formée.
  • 401key_revokedLa clé a été révoquée. Créez-en une nouvelle.
  • 402insufficient_creditsCrédits insuffisants pour cette demande. La réponse indique le nécessaire et le solde.
  • 403plan_limit_exceededLa demande dépasse la limite par génération du plan. Réduisez la durée ou la résolution.
  • 403account_suspendedLe compte propriétaire de la clé est suspendu.
  • 403api_disabledL’API est désactivée pour le moment.
  • 404not_foundLa tâche ou le point d’accès n’existe pas sur ce compte.
  • 404model_not_foundAucun modèle avec ce slug. Vérifiez le point d’accès des modèles.
  • 409too_many_runningCe compte a déjà 3 tâches en cours. Attendez qu’une se termine.
  • 422invalid_requestUn champ est manquant ou a un type incorrect. details liste chaque problème.
  • 422wrong_endpointLe modèle appartient à un autre point d’accès, par exemple un modèle image envoyé aux vidéos.
  • 422invalid_modeLe mode n’est pas reconnu par ce point d’accès.
  • 422mode_not_supportedLe modèle ne supporte pas ce mode.
  • 422prompt_requiredCe mode nécessite un prompt.
  • 422image_requiredCe mode nécessite image_url.
  • 429rate_limitedTrop de requêtes. Attendez le nombre de secondes indiqué dans Retry-After, puis réessayez.
  • 500internal_errorUn problème est survenu de notre côté. Réessayez dans un instant.
  • 503service_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.
En-têtes de limite de débit
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Modè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.5seedance-2-545 crédits
  • Seedance 2.0 Proseedance-2-pro35 crédits
  • Seedance 2.0 Miniseedance-2-mini24 crédits
  • Wan 3.0wan-346 crédits
  • MiniMax H3minimax-h330 crédits
  • Kling 3kling-330 crédits
  • Seedance 1.5 Proseedance-1-5-pro31 crédits
  • Seedance 1.0seedance-132 crédits
  • Kling O3kling-o346 crédits
  • Kling 2.6kling-2-641 crédits
  • Wan 2.7wan-2-735 crédits
  • Wanwan32 crédits
  • Grokgrok-video47 crédits
  • Veo 3veo-342 crédits
  • GPT Image 2.5gpt-image-2-54 crédits
  • GPT Image 2gpt-image-23 crédits
  • Seedream 5 Proseedream-5-pro4 crédits
  • Seedream 5seedream-53 crédits
  • Nano Banana Pronano-banana-pro5 crédits
  • Nano Banana 2nano-banana-23 crédits
  • Nano Banana 2 Litenano-banana-2-lite2 crédits
  • AI Musicai-music6 crédits

Prêt à créer ?

Créez une clé dans votre compte et envoyez votre première requête en une minute.

Créer une clé API