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.
https://novamotions.com/api/v1Avvio rapido
Tre passaggi da zero a video finito. Ogni richiesta è HTTPS semplice con JSON, quindi funziona con qualsiasi linguaggio o strumento.
- 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
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
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.
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
/api/v1/modelsTutti 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
{
"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
/api/v1/balanceI 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
{
"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
/api/v1/videosDa 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
modelstringObbligatorioIdentificativo del modello dall’endpoint modelli.promptstringObbligatorioCosa dovrebbe accadere nel clip. Facoltativo per immagine-a-video, dove conta il fotogramma iniziale.modestringFacoltativotext-to-video, image-to-video o reference-to-video. Scelto dagli input se omesso.durationintegerFacoltativoDurata del clip in secondi. Deve essere una delle durate del modello, altrimenti si usa quella predefinita.resolutionstringFacoltativoRisoluzione di output come 720p o 1080p, dalla lista del modello.aspect_ratiostringFacoltativo16:9, 9:16, 1:1, 4:3, 3:4 o 21:9, dalla lista del modello. Predefinito 16:9.audiobooleanFacoltativoGenera 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.countintegerFacoltativoQuanti video creare dalla stessa richiesta, da 1 a 4. Ognuno è un’attività separata e viene addebitato separatamente.seedintegerFacoltativoSeed 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
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 44,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 44,
"balance": 1131
}Crea immagini
/api/v1/imagesDa 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
modelstringObbligatorioIdentificativo del modello dall’endpoint modelli.promptstringObbligatorioCosa deve mostrare l’immagine o come modificare l’immagine fornita.modestringFacoltativotext-to-image o image-edit. Se omesso, scelto dagli input.resolutionstringFacoltativo1K, 2K o 4K, dalla lista del modello.aspect_ratiostringFacoltativoRapporto 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.countintegerFacoltativoImmagini per prompt, da 1 a 4. Ognuna è un’attività separata.seedintegerFacoltativoSeed 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
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 3,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 3,
"balance": 1172
}Crea una canzone
/api/v1/musicUna canzone completa da una descrizione, con testi tuoi o strumentale.
Parametri
modelstringObbligatorioIdentificativo del modello dall’endpoint modelli.promptstringObbligatorioGenere, atmosfera, strumenti e tempo della canzone.durationintegerFacoltativoDurata della canzone in secondi, dalle durate del modello.lyricsstringFacoltativoI tuoi testi. Lascia vuoto per farli scrivere al modello.instrumentalbooleanFacoltativoCrea 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
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 11,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 11,
"balance": 1164
}Ottieni un task
/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
{
"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
/api/v1/tasksTask 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
limitintegerFacoltativoRisultati per pagina, da 1 a 50. Predefinito 20.cursorstringFacoltativoValore next_cursor dalla pagina precedente.statusstringFacoltativoSolo 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
{
"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.
{
"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_jsonIl corpo non è un oggetto JSON. - 401
unauthorizedNessuna chiave Bearer nell’intestazione Authorization. - 401
invalid_api_keyLa chiave non esiste o è malformata. - 401
key_revokedLa chiave è stata revocata. Creane una nuova. - 402
insufficient_creditsCrediti insufficienti per questa richiesta. La risposta include necessari e saldo. - 403
plan_limit_exceededLa richiesta supera il limite per generazione del piano. Riduci durata o risoluzione. - 403
account_suspendedL’account proprietario della chiave è sospeso. - 403
api_disabledL’API è temporaneamente disattivata. - 404
not_foundL’attività o endpoint non esiste su questo account. - 404
model_not_foundNessun modello con questo slug. Controlla l’endpoint modelli. - 409
too_many_runningQuesto account ha già 3 attività in esecuzione. Attendi che una termini. - 422
invalid_requestUn campo manca o ha un tipo errato. details elenca ogni problema. - 422
wrong_endpointIl modello appartiene a un altro endpoint, per esempio un modello immagine inviato a video. - 422
invalid_modeLa modalità non è riconosciuta da questo endpoint. - 422
mode_not_supportedIl modello non supporta questa modalità. - 422
prompt_requiredQuesta modalità richiede un prompt. - 422
image_requiredQuesta modalità richiede image_url. - 429
rate_limitedTroppe richieste. Attendi i secondi indicati in Retry-After, poi riprova. - 500
internal_errorErrore interno. Riprova tra poco. - 503
service_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.
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42Modelli
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.5
seedance-2-5Video45 crediti - Seedance 2.0 Pro
seedance-2-proVideo35 crediti - Seedance 2.0 Mini
seedance-2-miniVideo24 crediti - Wan 3.0
wan-3Video46 crediti - MiniMax H3
minimax-h3Video30 crediti - Kling 3
kling-3Video30 crediti - Seedance 1.5 Pro
seedance-1-5-proVideo31 crediti - Seedance 1.0
seedance-1Video32 crediti - Kling O3
kling-o3Video46 crediti - Kling 2.6
kling-2-6Video41 crediti - Wan 2.7
wan-2-7Video35 crediti - Wan
wanVideo32 crediti - Grok
grok-videoVideo47 crediti - Veo 3
veo-3Video42 crediti - GPT Image 2.5
gpt-image-2-5Immagine4 crediti - GPT Image 2
gpt-image-2Immagine3 crediti - Seedream 5 Pro
seedream-5-proImmagine4 crediti - Seedream 5
seedream-5Immagine3 crediti - Nano Banana Pro
nano-banana-proImmagine5 crediti - Nano Banana 2
nano-banana-2Immagine3 crediti - Nano Banana 2 Lite
nano-banana-2-liteImmagine2 crediti - AI Music
ai-musicMusica6 crediti
Pronto per iniziare?
Crea una chiave nel tuo account e invia la tua prima richiesta in un minuto.