Genereer video, afbeeldingen en muziek vanuit je eigen code
Maak een sleutel aan, verstuur een verzoek met Bearer-authenticatie en controleer de taak totdat je bestand klaar is. Zelfde modellen, prijzen, planlimieten en restituties als de NovaMotions AI studio, vanuit één gedeeld credittegoed.
https://novamotions.com/api/v1Snelstart
Drie stappen van nul naar een voltooide video. Elk verzoek is gewone HTTPS met JSON, dus elke taal of tool werkt.
- 1
Maak een sleutel aan
Open de API-pagina in je account en maak een sleutel aan. De volledige sleutel wordt één keer getoond, dus sla deze op in een omgevingsvariabele genaamd API_KEY.
- 2
Dien een taak in
Stuur het model, een prompt en eventuele opties. Credits worden één keer afgeschreven bij het indienen, en de respons vertelt je hoeveel en wat er over is.
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": "Een langzame dolly-shot door een regenachtige neonstraat 's nachts, reflecties op nat asfalt, cinematografisch", "duration": 5, "resolution": "720p", "aspect_ratio": "16:9" }' - 3
Controleer totdat het klaar is
Controleer de taak elke paar seconden. Wanneer de status geslaagd is, download je het bestand via output_url. Als het mislukt is, zijn de credits al terug op je saldo.
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
Authenticatie
Stuur je sleutel mee in de Authorization-header van elk verzoek. Sleutels beginnen met nm_live_ en horen bij één account.
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json- Basis-URL
- Alle endpoints bevinden zich onder https://novamotions.com/api/v1 en geven JSON terug.
- Houd sleutels geheim
- Roep de API aan vanaf je server, nooit vanuit een browser of mobiele app. Een ingetrokken sleutel werkt direct niet meer.
- Één saldo
- API-aanroepen gebruiken de credits van de sleutel-eigenaar, hetzelfde saldo dat de studio gebruikt. Plangrenzen per generatie gelden ook.
- Media-URL's
- Afbeeldingen, video's en audio die je doorgeeft moeten openbare https-URL's zijn die laden zonder cookies of inloggen.
Modellenlijst
/api/v1/modelsElk model dat de API aanbiedt, met zijn modi, duur, resoluties, beeldverhoudingen, audiomogelijkheden, referentielimieten en de laagste prijs in credits. Gebruik dit om een modelkiezer te bouwen in plaats van opties hard te coderen.
Verzoek
curl https://novamotions.com/api/v1/models \
-H "Authorization: Bearer $API_KEY"Respons
{
"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
}
]
}Saldo controleren
/api/v1/balanceDe credits die de sleutel-eigenaar nu kan besteden, verdeeld in pools met hun vervaldatums, plus het huidige plan.
Verzoek
curl https://novamotions.com/api/v1/balance \
-H "Authorization: Bearer $API_KEY"Respons
{
"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"
}
}Maak een video
/api/v1/videosTekst naar video, afbeelding naar video (een startframe en optioneel een eindframe) of referentie naar video (afbeeldingen, clips en audio die het resultaat sturen). De modus wordt gekozen op basis van de inputs als je deze weglaat.
Parameters
modelstringVerplichtModelslug van het modellen-endpoint.promptstringVerplichtWat er in de clip moet gebeuren. Optioneel voor afbeelding-naar-video, waarbij het startframe leidend is.modestringOptioneeltekst-naar-video, afbeelding-naar-video of referentie-naar-video. Wordt gekozen op basis van je inputs als je het weglaat.durationintegerOptioneelLengte van de clip in seconden. Moet een van de modelduurwaarden zijn, anders wordt de standaard gebruikt.resolutionstringOptioneelOutputresolutie zoals 720p of 1080p, uit de lijst van het model.aspect_ratiostringOptioneel16:9, 9:16, 1:1, 4:3, 3:4 of 21:9, uit de lijst van het model. Standaard 16:9.audiobooleanOptioneelGenereer een soundtrack met dialoog, effecten en sfeer op modellen die dit ondersteunen. Kost 20 credits. Standaard uit.image_urlstring (URL)OptioneelStartframe voor image-to-video.end_image_urlstring (URL)OptioneelEindframe, op modellen die eerste en laatste frame ondersteunen.reference_image_urlsstring[]OptioneelReferentieafbeeldingen voor reference-to-video, tot de limiet van het model.reference_video_urlsstring[]OptioneelReferentieclips voor reference-to-video, tot de limiet van het model.reference_audio_urlsstring[]OptioneelAudio die de soundtrack begeleidt, tot de limiet van het model.countintegerOptioneelHoeveel video's te maken van dezelfde aanvraag, 1 tot 4. Elk is een aparte taak en wordt apart in rekening gebracht.seedintegerOptioneelVaste seed voor herhaalbare resultaten. Elk extra item in een batch krijgt de volgende seed.
Verzoek
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": "Een langzame dolly-shot door een regenachtige neonstraat 's nachts, reflecties op nat asfalt, cinematografisch",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'Respons
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 44,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 44,
"balance": 1131
}Maak afbeeldingen
/api/v1/imagesTekst naar afbeelding, of bewerk een bestaande afbeelding met een prompt. Vraag tot vier afbeeldingen per verzoek aan, elk is een eigen taak.
Parameters
modelstringVerplichtModelslug van het modellen-endpoint.promptstringVerplichtWat de afbeelding moet tonen, of hoe de afbeelding die je aanlevert moet worden aangepast.modestringOptioneeltext-to-image of image-edit. Wordt gekozen uit je invoer als dit ontbreekt.resolutionstringOptioneel1K, 2K of 4K, uit de lijst van het model.aspect_ratiostringOptioneelBeeldverhouding uit de lijst van het model, inclusief Auto op modellen die dat ondersteunen.image_urlstring (URL)OptioneelDe afbeelding om te bewerken. Verplicht voor image-edit.reference_image_urlsstring[]OptioneelExtra referentieafbeeldingen voor een bewerking, tot de limiet van het model.countintegerOptioneelAfbeeldingen per prompt, 1 tot 4. Elk is een aparte taak.seedintegerOptioneelVaste seed voor herhaalbare resultaten. Elk extra item in een batch krijgt de volgende seed.
Verzoek
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": "Studio productfoto van een keramische koffiekop op eikenhout, zacht raamlicht, geringe scherptediepte",
"resolution": "1K",
"aspect_ratio": "1:1",
"count": 1
}'Respons
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 3,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 3,
"balance": 1172
}Maak een nummer
/api/v1/musicEen volledig nummer vanuit een beschrijving, met je eigen songtekst of als instrumentaal.
Parameters
modelstringVerplichtModelslug van het modellen-endpoint.promptstringVerplichtGenre, sfeer, instrumenten en tempo van het nummer.durationintegerOptioneelLengte van het nummer in seconden, uit de beschikbare duur van het model.lyricsstringOptioneelJe eigen songteksten. Laat leeg om het model ze te laten schrijven.instrumentalbooleanOptioneelMaak een nummer zonder zang. Standaard uit.
Verzoek
curl -X POST https://novamotions.com/api/v1/music \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ai-music",
"prompt": "Warme lo-fi hiphop met zachte piano, vinylkraak en een ontspannen late-night groove",
"duration": 60,
"instrumental": false
}'Respons
{
"tasks": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"status": "queued",
"credits": 11,
"url": "https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2"
}
],
"credits_charged": 11,
"balance": 1164
}Haal een taak op
/api/v1/tasks/{id}Controleer een taak via zijn id. Zodra de status geslaagd is, wijst output_url naar het voltooide bestand. Polling gebruikt de leeslimiet, dus het gaat nooit ten koste van je indienbudget.
Verzoek
curl https://novamotions.com/api/v1/tasks/cmtask8k2x0001ab7c9d0e1f2 \
-H "Authorization: Bearer $API_KEY"Respons
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"object": "task",
"kind": "video",
"model": "seedance-2-pro",
"mode": "text-to-video",
"status": "succeeded",
"progress": 100,
"prompt": "Een langzame dolly-shot door een regenachtige neonstraat 's nachts, reflecties op nat asfalt, cinematografisch",
"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"
}Takenlijst
/api/v1/tasksTaken die je via de API in de afgelopen 30 dagen hebt aangemaakt, nieuwste eerst, met dezelfde vorm als een enkele taak. Geef next_cursor door als cursor om de volgende pagina te laden.
Parameters
limitintegerOptioneelResultaten per pagina, 1 tot 50. Standaard 20.cursorstringOptioneelDe next_cursor waarde van de vorige pagina.statusstringOptioneelAlleen taken met deze status: queued, running, succeeded of failed.
Verzoek
curl https://novamotions.com/api/v1/tasks?limit=20 \
-H "Authorization: Bearer $API_KEY"Respons
{
"object": "list",
"data": [
{
"id": "cmtask8k2x0001ab7c9d0e1f2",
"object": "task",
"kind": "video",
"model": "seedance-2-pro",
"mode": "text-to-video",
"status": "succeeded",
"progress": 100,
"prompt": "Een langzame dolly-shot door een regenachtige neonstraat 's nachts, reflecties op nat asfalt, cinematografisch",
"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
}Taakstatussen
Een taak gaat van queued naar running en eindigt als succeeded of failed. Stop met polleren bij een eindstatus.
queued- Geaccepteerd en wacht op een renderplek. Blijf polleren.
running- Bezig met renderen. Voortgang gaat van 0 tot 99.
succeeded- Klaar. output_url en thumbnail_url wijzen naar de voltooide bestanden.
failed- Eindigde zonder resultaat. error legt uit waarom en refunded is true, de credits zijn terug op je saldo.
Foutcodes
Elke fout heeft dezelfde structuur. Vertak op code en toon een bericht aan de gebruiker. Een taak die geaccepteerd is kan later nog falen, controleer daarom de status bij het polleren.
{
"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_jsonDe body is geen JSON-object. - 401
unauthorizedGeen Bearer-sleutel in de Authorization-header. - 401
invalid_api_keyDe sleutel bestaat niet of is ongeldig. - 401
key_revokedDe sleutel is ingetrokken. Maak een nieuwe aan. - 402
insufficient_creditsOnvoldoende credits voor deze aanvraag. De respons bevat benodigd en saldo. - 403
plan_limit_exceededDe aanvraag overschrijdt de per-generatie limiet van het plan. Verlaag de duur of resolutie. - 403
account_suspendedHet account dat de sleutel bezit is geschorst. - 403
api_disabledDe API is momenteel uitgeschakeld. - 404
not_foundDe taak of endpoint bestaat niet op dit account. - 404
model_not_foundGeen model met deze slug. Controleer de models endpoint. - 409
too_many_runningDit account heeft al 3 taken actief. Wacht tot er een klaar is. - 422
invalid_requestEen veld ontbreekt of heeft het verkeerde type. details geeft elk probleem weer. - 422
wrong_endpointHet model hoort bij een andere endpoint, bijvoorbeeld een beeldmodel naar video gestuurd. - 422
invalid_modeDe modus is niet bekend bij deze endpoint. - 422
mode_not_supportedHet model ondersteunt deze modus niet. - 422
prompt_requiredDeze modus vereist een prompt. - 422
image_requiredDeze modus vereist image_url. - 429
rate_limitedTe veel aanvragen. Wacht het aantal seconden in Retry-After en probeer opnieuw. - 500
internal_errorEr is iets misgegaan aan onze kant. Probeer het over een moment opnieuw. - 503
service_busyWe zitten momenteel op capaciteit. Probeer het over een paar minuten opnieuw.
Credits en terugbetalingen
Eenmalig in rekening gebracht bij verzenden
Elke taak kost hetzelfde als dezelfde instellingen in de studio. De verzendrespons geeft credits_charged en je nieuwe saldo terug. Audio bij video kost 20 extra credits.
Mislukte taken worden volledig terugbetaald
Als een taak om welke reden dan ook faalt, gaan alle credits terug naar de oorspronkelijke pools en toont de taak refunded als true. Niets om te claimen.
Planlimieten gelden
De per-generatie limiet van je plan geldt ook voor API-taken. Credits die het eerst verlopen worden eerst gebruikt, opwaardeercredits als laatste.
Snelheidslimieten
Limieten worden per sleutel geteld over een rollende minuut. Bij overschrijding krijg je HTTP 429 met een Retry-After header in seconden. Elke respons bevat X-RateLimit headers zodat je kunt vertragen voordat dat gebeurt.
- Verzenden
- 30 per minuut
- Video's, afbeeldingen en nummers maken.
- Lezen
- 120 per minuut
- Taken, saldo en modellen. Apart geteld van verzenden.
- Gelijktijdig actief
- 3
- Taken per account die tegelijk renderen.
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42Modellen
De modellen die je vandaag kunt gebruiken met hun slugs en laagste prijs. De modellen endpoint geeft dezelfde lijst met alle opties terug.
- Seedance 2.5
seedance-2-5Video45 credits - Seedance 2.0 Pro
seedance-2-proVideo35 credits - Seedance 2.0 Mini
seedance-2-miniVideo24 credits - Wan 3.0
wan-3Video46 credits - MiniMax H3
minimax-h3Video30 credits - Kling 3
kling-3Video30 credits - Seedance 1.5 Pro
seedance-1-5-proVideo31 credits - Seedance 1.0
seedance-1Video32 credits - Kling O3
kling-o3Video46 credits - Kling 2.6
kling-2-6Video41 credits - Wan 2.7
wan-2-7Video35 credits - Wan
wanVideo32 credits - Grok
grok-videoVideo47 credits - Veo 3
veo-3Video42 credits - GPT Image 2.5
gpt-image-2-5Afbeelding4 credits - GPT Image 2
gpt-image-2Afbeelding3 credits - Seedream 5 Pro
seedream-5-proAfbeelding4 credits - Seedream 5
seedream-5Afbeelding3 credits - Nano Banana Pro
nano-banana-proAfbeelding5 credits - Nano Banana 2
nano-banana-2Afbeelding3 credits - Nano Banana 2 Lite
nano-banana-2-liteAfbeelding2 credits - AI Music
ai-musicMuziek6 credits
Klaar om te starten?
Maak een sleutel aan in je account en verstuur je eerste verzoek binnen een minuut.