API Pubblica

Genera video, immagini e musica dal tuo codice

Crea una chiave, invia una richiesta con autenticazione Bearer e controlla lo stato del task finché il file non è pronto. Stessi modelli, prezzi, limiti del piano e rimborsi dello studio NovaMotions AI, con un saldo crediti condiviso.

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

Avvio rapido

Tre passaggi da zero a video finito. Ogni richiesta è HTTPS semplice con JSON, quindi funziona con qualsiasi linguaggio o strumento.

  1. 1

    Crea una chiave

    Apri la pagina API nel tuo account e crea una chiave. La chiave completa viene mostrata una sola volta, quindi salvala in una variabile d’ambiente chiamata API_KEY.

  2. 2

    Invia un task

    Invia il modello, un prompt e le opzioni. I crediti vengono addebitati una sola volta, all’invio, e la risposta indica quanti ne restano e quali.

    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": "Una lenta carrellata in una strada al neon piovosa di notte, riflessi sull’asfalto bagnato, cinematografico",
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "16:9"
      }'
  3. 3

    Controlla finché non è pronto

    Controlla il task ogni pochi secondi. Quando lo stato è riuscito, scarica il file da output_url. Se è fallito, i crediti sono già stati riaccreditati.

    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

Autenticazione

Invia la tua chiave nell’intestazione Authorization di ogni richiesta. Le chiavi iniziano con nm_live_ e appartengono a un account.

HTTP
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json
URL base
Tutti gli endpoint sono sotto https://novamotions.com/api/v1 e restituiscono JSON.
Tieni segrete le chiavi
Chiama l’API dal tuo server, mai da un browser o app mobile. Una chiave revocata smette di funzionare subito.
Un saldo unico
Le chiamate API consumano i crediti del proprietario della chiave, lo stesso saldo usato dallo studio. Si applicano anche i limiti del piano per generazione.
URL media
Immagini, video e audio che invii devono essere URL https pubblici che si caricano senza cookie o login.

Elenco modelli

GET/api/v1/models

Tutti i modelli serviti dall’API, con modalità, durate, risoluzioni, rapporti d’aspetto, supporto audio, limiti di riferimento e il prezzo più basso in crediti. Usalo per costruire un selettore di modelli invece di codificare opzioni fisse.

Richiesta

curl https://novamotions.com/api/v1/models \
  -H "Authorization: Bearer $API_KEY"

Risposta

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
    }
  ]
}

Controlla saldo

GET/api/v1/balance

I crediti che il proprietario della chiave può spendere ora, divisi in pool con le rispettive scadenze, più il piano attuale.

Richiesta

curl https://novamotions.com/api/v1/balance \
  -H "Authorization: Bearer $API_KEY"

Risposta

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"
  }
}

Crea un video

POST/api/v1/videos

Da testo a video, da immagine a video (un fotogramma iniziale e opzionalmente uno finale) o da riferimento a video (immagini, clip e audio che guidano il risultato). La modalità viene scelta dagli input se la ometti.

Parametri

  • modelstring
    ObbligatorioIdentificativo del modello dall’endpoint modelli.
  • promptstring
    ObbligatorioCosa dovrebbe accadere nel clip. Facoltativo per immagine-a-video, dove conta il fotogramma iniziale.
  • modestring
    Facoltativotext-to-video, image-to-video o reference-to-video. Scelto dagli input se omesso.
  • durationinteger
    FacoltativoDurata del clip in secondi. Deve essere una delle durate del modello, altrimenti si usa quella predefinita.
  • resolutionstring
    FacoltativoRisoluzione di output come 720p o 1080p, dalla lista del modello.
  • aspect_ratiostring
    Facoltativo16:9, 9:16, 1:1, 4:3, 3:4 o 21:9, dalla lista del modello. Predefinito 16:9.
  • audioboolean
    FacoltativoGenera una colonna sonora con dialoghi, effetti e ambientazione sui modelli che lo supportano. Aggiunge 20 crediti. Predefinito falso.
  • image_urlstring (URL)
    FacoltativoFotogramma iniziale per immagine-video.
  • end_image_urlstring (URL)
    FacoltativoFotogramma finale, sui modelli che supportano primo e ultimo fotogramma.
  • reference_image_urlsstring[]
    FacoltativoImmagini di riferimento per riferimento-video, fino al limite del modello.
  • reference_video_urlsstring[]
    FacoltativoClip di riferimento per riferimento-video, fino al limite del modello.
  • reference_audio_urlsstring[]
    FacoltativoAudio che guida la colonna sonora, fino al limite del modello.
  • countinteger
    FacoltativoQuanti video creare dalla stessa richiesta, da 1 a 4. Ognuno è un’attività separata e viene addebitato separatamente.
  • seedinteger
    FacoltativoSeed fisso per risultati ripetibili. Ogni elemento extra in un batch riceve il seed successivo.

Richiesta

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": "Una lenta carrellata in una strada al neon piovosa di notte, riflessi sull’asfalto bagnato, cinematografico",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'

Risposta

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

Crea immagini

POST/api/v1/images

Da testo a immagine, o modifica un’immagine esistente con un prompt. Puoi richiedere fino a quattro immagini per richiesta, ognuna è un task a sé.

Parametri

  • modelstring
    ObbligatorioIdentificativo del modello dall’endpoint modelli.
  • promptstring
    ObbligatorioCosa deve mostrare l’immagine o come modificare l’immagine fornita.
  • modestring
    Facoltativotext-to-image o image-edit. Se omesso, scelto dagli input.
  • resolutionstring
    Facoltativo1K, 2K o 4K, dalla lista del modello.
  • aspect_ratiostring
    FacoltativoRapporto d’aspetto dalla lista del modello, incluso Auto sui modelli che lo supportano.
  • image_urlstring (URL)
    FacoltativoImmagine da modificare. Obbligatorio per image-edit.
  • reference_image_urlsstring[]
    FacoltativoImmagini di riferimento extra per una modifica, fino al limite del modello.
  • countinteger
    FacoltativoImmagini per prompt, da 1 a 4. Ognuna è un’attività separata.
  • seedinteger
    FacoltativoSeed fisso per risultati ripetibili. Ogni elemento extra in un batch riceve il seed successivo.

Richiesta

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": "Foto prodotto in studio di una tazza di ceramica su quercia, luce soffusa da finestra, profondità di campo ridotta",
    "resolution": "1K",
    "aspect_ratio": "1:1",
    "count": 1
  }'

Risposta

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

Crea una canzone

POST/api/v1/music

Una canzone completa da una descrizione, con testi tuoi o strumentale.

Parametri

  • modelstring
    ObbligatorioIdentificativo del modello dall’endpoint modelli.
  • promptstring
    ObbligatorioGenere, atmosfera, strumenti e tempo della canzone.
  • durationinteger
    FacoltativoDurata della canzone in secondi, dalle durate del modello.
  • lyricsstring
    FacoltativoI tuoi testi. Lascia vuoto per farli scrivere al modello.
  • instrumentalboolean
    FacoltativoCrea una canzone senza voce. Predefinito falso.

Richiesta

curl -X POST https://novamotions.com/api/v1/music \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ai-music",
    "prompt": "Lo-fi hip hop caldo con pianoforte morbido, crepitio di vinile e groove rilassato da tarda notte",
    "duration": 60,
    "instrumental": false
  }'

Risposta

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

Ottieni un task

GET/api/v1/tasks/{id}

Controlla un task tramite il suo ID. Quando lo stato è riuscito, output_url punta al file finito. Il polling usa il limite di lettura, quindi non consuma il budget di invio.

Richiesta

curl https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2 \
  -H "Authorization: Bearer $API_KEY"

Risposta

JSON
{
  "id": "cmtask8k2x0001ab7c9d0e1f2",
  "object": "task",
  "kind": "video",
  "model": "seedance-2-pro",
  "mode": "text-to-video",
  "status": "succeeded",
  "progress": 100,
  "prompt": "Una lenta carrellata in una strada al neon piovosa di notte, riflessi sull’asfalto bagnato, cinematografico",
  "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"
}

Elenca task

GET/api/v1/tasks

Task creati tramite API negli ultimi 30 giorni, dal più recente, con la stessa struttura di un singolo task. Passa next_cursor come cursor per caricare la pagina successiva.

Parametri

  • limitinteger
    FacoltativoRisultati per pagina, da 1 a 50. Predefinito 20.
  • cursorstring
    FacoltativoValore next_cursor dalla pagina precedente.
  • statusstring
    FacoltativoSolo attività con questo stato: in coda, in esecuzione, completata o fallita.

Richiesta

curl https://novamotions.com/api/v1/tasks?limit=20 \
  -H "Authorization: Bearer $API_KEY"

Risposta

JSON
{
  "object": "list",
  "data": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "object": "task",
      "kind": "video",
      "model": "seedance-2-pro",
      "mode": "text-to-video",
      "status": "succeeded",
      "progress": 100,
      "prompt": "Una lenta carrellata in una strada al neon piovosa di notte, riflessi sull’asfalto bagnato, cinematografico",
      "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
}

Stati delle attività

Un’attività passa da in coda a in esecuzione e termina come completata o fallita. Interrompi il polling in uno di questi stati finali.

queued
Accettata e in attesa di uno slot di rendering. Continua il polling.
running
Rendering in corso. il progresso va da 0 a 99.
succeeded
Fatto. output_url e thumbnail_url puntano ai file finiti.
failed
Terminata senza risultato. error spiega il motivo e refunded è true, i crediti sono stati riaccreditati.

Codici di errore

Ogni errore ha la stessa struttura. Differenzia per codice e mostra il messaggio all’utente. Un’attività accettata può comunque fallire dopo, quindi controlla lo stato durante il polling.

Risposta di errore
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonIl corpo non è un oggetto JSON.
  • 401unauthorizedNessuna chiave Bearer nell’intestazione Authorization.
  • 401invalid_api_keyLa chiave non esiste o è malformata.
  • 401key_revokedLa chiave è stata revocata. Creane una nuova.
  • 402insufficient_creditsCrediti insufficienti per questa richiesta. La risposta include necessari e saldo.
  • 403plan_limit_exceededLa richiesta supera il limite per generazione del piano. Riduci durata o risoluzione.
  • 403account_suspendedL’account proprietario della chiave è sospeso.
  • 403api_disabledL’API è temporaneamente disattivata.
  • 404not_foundL’attività o endpoint non esiste su questo account.
  • 404model_not_foundNessun modello con questo slug. Controlla l’endpoint modelli.
  • 409too_many_runningQuesto account ha già 3 attività in esecuzione. Attendi che una termini.
  • 422invalid_requestUn campo manca o ha un tipo errato. details elenca ogni problema.
  • 422wrong_endpointIl modello appartiene a un altro endpoint, per esempio un modello immagine inviato a video.
  • 422invalid_modeLa modalità non è riconosciuta da questo endpoint.
  • 422mode_not_supportedIl modello non supporta questa modalità.
  • 422prompt_requiredQuesta modalità richiede un prompt.
  • 422image_requiredQuesta modalità richiede image_url.
  • 429rate_limitedTroppe richieste. Attendi i secondi indicati in Retry-After, poi riprova.
  • 500internal_errorErrore interno. Riprova tra poco.
  • 503service_busySiamo al massimo della capacità. Riprova tra qualche minuto.

Crediti e rimborsi

Addebitato una volta, all’invio

Ogni attività costa quanto le stesse impostazioni in studio. La risposta all’invio restituisce credits_charged e il tuo nuovo saldo. Audio su video aggiunge 20 crediti.

Rimborso completo per attività fallite

Se un’attività fallisce per qualsiasi motivo, tutti i suoi crediti tornano ai pool di origine e l’attività mostra refunded come true. Nessuna azione richiesta.

Si applicano i limiti del piano

Il limite per generazione del tuo piano si applica anche alle attività API. I crediti con scadenza più prossima vengono spesi prima, quelli di ricarica per ultimi.

Limiti di velocità

I limiti si calcolano per chiave su un minuto mobile. Superato il limite ricevi HTTP 429 con intestazione Retry-After in secondi. Ogni risposta include intestazioni X-RateLimit per rallentare prima del limite.

Invia
30 al minuto
Creazione di video, immagini e canzoni.
Lettura
120 al minuto
Attività, saldo e modelli. Contati separatamente dagli invii.
Esecuzioni simultanee
3
Attività per account in esecuzione contemporaneamente.
Intestazioni limite di velocità
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Modelli

I modelli che puoi utilizzare oggi con i loro slug e il prezzo più basso. L'endpoint dei modelli restituisce la stessa lista con tutte le opzioni.

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

Pronto per iniziare?

Crea una chiave nel tuo account e invia la tua prima richiesta in un minuto.

Crea una chiave API