Openbare API

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.

Basis-URLhttps://novamotions.com/api/v1

Snelstart

Drie stappen van nul naar een voltooide video. Elk verzoek is gewone HTTPS met JSON, dus elke taal of tool werkt.

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

HTTP
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

GET/api/v1/models

Elk 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

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

Saldo controleren

GET/api/v1/balance

De 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

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

Maak een video

POST/api/v1/videos

Tekst 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

  • modelstring
    VerplichtModelslug van het modellen-endpoint.
  • promptstring
    VerplichtWat er in de clip moet gebeuren. Optioneel voor afbeelding-naar-video, waarbij het startframe leidend is.
  • modestring
    Optioneeltekst-naar-video, afbeelding-naar-video of referentie-naar-video. Wordt gekozen op basis van je inputs als je het weglaat.
  • durationinteger
    OptioneelLengte van de clip in seconden. Moet een van de modelduurwaarden zijn, anders wordt de standaard gebruikt.
  • resolutionstring
    OptioneelOutputresolutie zoals 720p of 1080p, uit de lijst van het model.
  • aspect_ratiostring
    Optioneel16:9, 9:16, 1:1, 4:3, 3:4 of 21:9, uit de lijst van het model. Standaard 16:9.
  • audioboolean
    OptioneelGenereer 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.
  • countinteger
    OptioneelHoeveel video's te maken van dezelfde aanvraag, 1 tot 4. Elk is een aparte taak en wordt apart in rekening gebracht.
  • seedinteger
    OptioneelVaste 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

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

Maak afbeeldingen

POST/api/v1/images

Tekst naar afbeelding, of bewerk een bestaande afbeelding met een prompt. Vraag tot vier afbeeldingen per verzoek aan, elk is een eigen taak.

Parameters

  • modelstring
    VerplichtModelslug van het modellen-endpoint.
  • promptstring
    VerplichtWat de afbeelding moet tonen, of hoe de afbeelding die je aanlevert moet worden aangepast.
  • modestring
    Optioneeltext-to-image of image-edit. Wordt gekozen uit je invoer als dit ontbreekt.
  • resolutionstring
    Optioneel1K, 2K of 4K, uit de lijst van het model.
  • aspect_ratiostring
    OptioneelBeeldverhouding 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.
  • countinteger
    OptioneelAfbeeldingen per prompt, 1 tot 4. Elk is een aparte taak.
  • seedinteger
    OptioneelVaste 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

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

Maak een nummer

POST/api/v1/music

Een volledig nummer vanuit een beschrijving, met je eigen songtekst of als instrumentaal.

Parameters

  • modelstring
    VerplichtModelslug van het modellen-endpoint.
  • promptstring
    VerplichtGenre, sfeer, instrumenten en tempo van het nummer.
  • durationinteger
    OptioneelLengte van het nummer in seconden, uit de beschikbare duur van het model.
  • lyricsstring
    OptioneelJe eigen songteksten. Laat leeg om het model ze te laten schrijven.
  • instrumentalboolean
    OptioneelMaak 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

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

Haal een taak op

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

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

GET/api/v1/tasks

Taken 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

  • limitinteger
    OptioneelResultaten per pagina, 1 tot 50. Standaard 20.
  • cursorstring
    OptioneelDe next_cursor waarde van de vorige pagina.
  • statusstring
    OptioneelAlleen 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

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

Foutrespons
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonDe body is geen JSON-object.
  • 401unauthorizedGeen Bearer-sleutel in de Authorization-header.
  • 401invalid_api_keyDe sleutel bestaat niet of is ongeldig.
  • 401key_revokedDe sleutel is ingetrokken. Maak een nieuwe aan.
  • 402insufficient_creditsOnvoldoende credits voor deze aanvraag. De respons bevat benodigd en saldo.
  • 403plan_limit_exceededDe aanvraag overschrijdt de per-generatie limiet van het plan. Verlaag de duur of resolutie.
  • 403account_suspendedHet account dat de sleutel bezit is geschorst.
  • 403api_disabledDe API is momenteel uitgeschakeld.
  • 404not_foundDe taak of endpoint bestaat niet op dit account.
  • 404model_not_foundGeen model met deze slug. Controleer de models endpoint.
  • 409too_many_runningDit account heeft al 3 taken actief. Wacht tot er een klaar is.
  • 422invalid_requestEen veld ontbreekt of heeft het verkeerde type. details geeft elk probleem weer.
  • 422wrong_endpointHet model hoort bij een andere endpoint, bijvoorbeeld een beeldmodel naar video gestuurd.
  • 422invalid_modeDe modus is niet bekend bij deze endpoint.
  • 422mode_not_supportedHet model ondersteunt deze modus niet.
  • 422prompt_requiredDeze modus vereist een prompt.
  • 422image_requiredDeze modus vereist image_url.
  • 429rate_limitedTe veel aanvragen. Wacht het aantal seconden in Retry-After en probeer opnieuw.
  • 500internal_errorEr is iets misgegaan aan onze kant. Probeer het over een moment opnieuw.
  • 503service_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.
Rate limit headers
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Modellen

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

Klaar om te starten?

Maak een sleutel aan in je account en verstuur je eerste verzoek binnen een minuut.

Maak een API-sleutel aan