API Pública

Gere vídeos, imagens e músicas com seu próprio código

Crie uma chave, envie uma requisição com autenticação Bearer e consulte a tarefa até seu arquivo estar pronto. Mesmos modelos, preços, limites de plano e reembolsos do estúdio NovaMotions AI, com um saldo de créditos compartilhado.

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

Início rápido

Três passos do zero até um vídeo finalizado. Toda requisição é HTTPS simples com JSON, então qualquer linguagem ou ferramenta funciona.

  1. 1

    Crie uma chave

    Abra a página da API na sua conta e crie uma chave. A chave completa é mostrada uma única vez, então armazene-a em uma variável de ambiente chamada API_KEY.

  2. 2

    Envie uma tarefa

    Envie o modelo, um prompt e quaisquer opções. Os créditos são cobrados uma vez, no envio, e a resposta informa quantos foram usados e o saldo restante.

    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": "Um movimento lento de câmera por uma rua neon chuvosa à noite, reflexos no asfalto molhado, cinematográfico",
        "duration": 5,
        "resolution": "720p",
        "aspect_ratio": "16:9"
      }'
  3. 3

    Consulte até estar pronta

    Verifique a tarefa a cada poucos segundos. Quando o status for concluído, baixe o arquivo em output_url. Se falhar, os créditos já foram devolvidos ao seu 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

Autenticação

Envie sua chave no cabeçalho Authorization de cada requisição. As chaves começam com nm_live_ e pertencem a uma conta.

HTTP
Authorization: Bearer nm_live_your_api_key
Content-Type: application/json
URL base
Todos os endpoints estão sob https://novamotions.com/api/v1 e retornam JSON.
Mantenha as chaves em segredo
Chame a API do seu servidor, nunca do navegador ou app móvel. Uma chave revogada para de funcionar imediatamente.
Um saldo único
Chamadas à API gastam os créditos do dono da chave, o mesmo saldo usado pelo estúdio. Limites do plano por geração também se aplicam.
URLs de mídia
Imagens, vídeos e áudios que você enviar devem ser URLs https públicas que carreguem sem cookies ou login.

Listar modelos

GET/api/v1/models

Todos os modelos que a API oferece, com seus modos, durações, resoluções, proporções, suporte a áudio, limites de referência e o menor preço em créditos. Use para criar um seletor de modelos em vez de codificar opções fixas.

Requisição

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

Resposta

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

Verificar saldo

GET/api/v1/balance

Os créditos que o dono da chave pode gastar agora, divididos em grupos com suas datas de expiração, além do plano atual.

Requisição

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

Resposta

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

Criar vídeo

POST/api/v1/videos

Texto para vídeo, imagem para vídeo (um quadro inicial e opcionalmente um quadro final) ou referência para vídeo (imagens, clipes e áudio que guiam o resultado). O modo é escolhido pelos inputs quando omitido.

Parâmetros

  • modelstring
    ObrigatórioIdentificador do modelo do endpoint de modelos.
  • promptstring
    ObrigatórioO que deve acontecer no clipe. Opcional para imagem-para-vídeo, onde o quadro inicial é o guia.
  • modestring
    Opcionaltexto-para-vídeo, imagem-para-vídeo ou referência-para-vídeo. Escolhido pelos seus inputs quando omitido.
  • durationinteger
    OpcionalDuração do clipe em segundos. Deve ser uma das durações do modelo, caso contrário o padrão é usado.
  • resolutionstring
    OpcionalResolução de saída como 720p ou 1080p, da lista do modelo.
  • aspect_ratiostring
    Opcional16:9, 9:16, 1:1, 4:3, 3:4 ou 21:9, da lista do modelo. Padrão é 16:9.
  • audioboolean
    OpcionalGere uma trilha sonora com diálogo, efeitos e ambiente nos modelos que suportam. Adiciona 20 créditos. Padrão é falso.
  • image_urlstring (URL)
    OpcionalQuadro inicial para imagem para vídeo.
  • end_image_urlstring (URL)
    OpcionalQuadro final, em modelos que suportam primeiro e último quadro.
  • reference_image_urlsstring[]
    OpcionalImagens de referência para referência para vídeo, até o limite do modelo.
  • reference_video_urlsstring[]
    OpcionalClipes de referência para referência para vídeo, até o limite do modelo.
  • reference_audio_urlsstring[]
    OpcionalÁudio que guia a trilha sonora, até o limite do modelo.
  • countinteger
    OpcionalQuantos vídeos criar a partir do mesmo pedido, de 1 a 4. Cada um é uma tarefa separada e cobrada separadamente.
  • seedinteger
    OpcionalSemente fixa para resultados repetíveis. Cada item extra em um lote recebe a próxima semente.

Requisição

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": "Um movimento lento de câmera por uma rua neon chuvosa à noite, reflexos no asfalto molhado, cinematográfico",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'

Resposta

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

Criar imagens

POST/api/v1/images

Texto para imagem, ou editar uma imagem existente com um prompt. Peça até quatro imagens por requisição, cada uma é uma tarefa separada.

Parâmetros

  • modelstring
    ObrigatórioIdentificador do modelo do endpoint de modelos.
  • promptstring
    ObrigatórioO que a imagem deve mostrar, ou como alterar a imagem que você fornece.
  • modestring
    Opcionaltexto-para-imagem ou edição de imagem. Escolhido a partir das suas entradas se omitido.
  • resolutionstring
    Opcional1K, 2K ou 4K, da lista do modelo.
  • aspect_ratiostring
    OpcionalProporção da imagem da lista do modelo, incluindo Automático em modelos que suportam.
  • image_urlstring (URL)
    OpcionalA imagem a ser editada. Obrigatório para edição de imagem.
  • reference_image_urlsstring[]
    OpcionalImagens de referência extras para uma edição, até o limite do modelo.
  • countinteger
    OpcionalImagens por prompt, de 1 a 4. Cada uma é uma tarefa separada.
  • seedinteger
    OpcionalSemente fixa para resultados repetíveis. Cada item extra em um lote recebe a próxima semente.

Requisição

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 de produto em estúdio de uma xícara de cerâmica sobre carvalho, luz suave da janela, profundidade de campo rasa",
    "resolution": "1K",
    "aspect_ratio": "1:1",
    "count": 1
  }'

Resposta

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

Criar música

POST/api/v1/music

Uma música completa a partir de uma descrição, com suas próprias letras ou instrumental.

Parâmetros

  • modelstring
    ObrigatórioIdentificador do modelo do endpoint de modelos.
  • promptstring
    ObrigatórioGênero, humor, instrumentos e ritmo da música.
  • durationinteger
    OpcionalDuração da música em segundos, das durações do modelo.
  • lyricsstring
    OpcionalSuas próprias letras. Omitir para deixar o modelo escrevê-las.
  • instrumentalboolean
    OpcionalCriar uma música sem vocais. Padrão é falso.

Requisição

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 quente com piano suave, estalo de vinil e groove relaxado de madrugada",
    "duration": 60,
    "instrumental": false
  }'

Resposta

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

Obter tarefa

GET/api/v1/tasks/{id}

Consulte uma tarefa pelo seu id. Quando o status for concluído, output_url aponta para o arquivo finalizado. Consultas usam o limite de leitura, então não consomem seu orçamento de envio.

Requisição

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

Resposta

JSON
{
  "id": "cmtask8k2x0001ab7c9d0e1f2",
  "object": "task",
  "kind": "video",
  "model": "seedance-2-pro",
  "mode": "text-to-video",
  "status": "succeeded",
  "progress": 100,
  "prompt": "Um movimento lento de câmera por uma rua neon chuvosa à noite, reflexos no asfalto molhado, cinematográfico",
  "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"
}

Listar tarefas

GET/api/v1/tasks

Tarefas criadas pela API nos últimos 30 dias, da mais nova para a mais antiga, com o mesmo formato de uma tarefa única. Use next_cursor como cursor para carregar a próxima página.

Parâmetros

  • limitinteger
    OpcionalResultados por página, de 1 a 50. Padrão é 20.
  • cursorstring
    OpcionalO valor next_cursor da página anterior.
  • statusstring
    OpcionalApenas tarefas com este status: na fila, em execução, concluída ou falhou.

Requisição

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

Resposta

JSON
{
  "object": "list",
  "data": [
    {
      "id": "cmtask8k2x0001ab7c9d0e1f2",
      "object": "task",
      "kind": "video",
      "model": "seedance-2-pro",
      "mode": "text-to-video",
      "status": "succeeded",
      "progress": 100,
      "prompt": "Um movimento lento de câmera por uma rua neon chuvosa à noite, reflexos no asfalto molhado, cinematográfico",
      "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
}

Status das tarefas

Uma tarefa passa de na fila para em execução e termina como concluída ou falhou. Pare de consultar em qualquer estado final.

queued
Aceita e aguardando uma vaga para renderização. Continue consultando.
running
Renderizando agora. progresso vai de 0 a 99.
succeeded
Concluído. output_url e thumbnail_url apontam para os arquivos finalizados.
failed
Terminou sem resultado. error explica o motivo e refunded é true, os créditos voltam para seu saldo.

Códigos de erro

Todo erro tem o mesmo formato. Baseie-se no código e mostre a mensagem para o usuário. Uma tarefa aceita pode falhar depois, então verifique seu status ao consultar.

Resposta de erro
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request. Top up or renew your plan, then retry.",
    "needed": 44,
    "balance": 14
  }
}
  • 400invalid_jsonO corpo não é um objeto JSON.
  • 401unauthorizedSem chave Bearer no cabeçalho Authorization.
  • 401invalid_api_keyA chave não existe ou está malformada.
  • 401key_revokedA chave foi revogada. Crie uma nova.
  • 402insufficient_creditsCréditos insuficientes para esta solicitação. A resposta inclui necessário e saldo.
  • 403plan_limit_exceededA solicitação ultrapassa o limite por geração do plano. Reduza a duração ou resolução.
  • 403account_suspendedA conta que possui a chave está suspensa.
  • 403api_disabledA API está desativada no momento.
  • 404not_foundA tarefa ou endpoint não existe nesta conta.
  • 404model_not_foundNenhum modelo com este identificador. Verifique o endpoint de modelos.
  • 409too_many_runningEsta conta já tem 3 tarefas em execução. Aguarde a conclusão de uma.
  • 422invalid_requestUm campo está faltando ou tem tipo errado. details lista cada problema.
  • 422wrong_endpointO modelo pertence a outro endpoint, por exemplo, um modelo de imagem enviado para vídeos.
  • 422invalid_modeO modo não é reconhecido por este endpoint.
  • 422mode_not_supportedO modelo não suporta este modo.
  • 422prompt_requiredEste modo precisa de um prompt.
  • 422image_requiredEste modo precisa de image_url.
  • 429rate_limitedMuitas solicitações. Aguarde os segundos indicados em Retry-After e tente novamente.
  • 500internal_errorAlgo quebrou do nosso lado. Tente novamente em instantes.
  • 503service_busyEstamos com capacidade máxima no momento. Tente novamente em alguns minutos.

Créditos e reembolsos

Cobrado uma vez, ao enviar

Cada tarefa custa o mesmo que as mesmas configurações no estúdio. A resposta do envio retorna credits_charged e seu novo saldo. Áudio em vídeo adiciona 20 créditos.

Tarefas falhadas são reembolsadas integralmente

Se uma tarefa falhar por qualquer motivo, todos os seus créditos retornam para os pools de onde vieram e a tarefa mostra refunded como true. Nada a reclamar.

Limites do plano se aplicam

O limite por geração do seu plano também se aplica às tarefas da API. Créditos que expiram primeiro são usados primeiro, créditos de recarga por último.

Limites de taxa

Os limites contam por chave em um minuto móvel. Se ultrapassar, você recebe HTTP 429 com um cabeçalho Retry-After em segundos. Cada resposta traz os cabeçalhos X-RateLimit para você desacelerar antes disso.

Enviar
30 por minuto
Criar vídeos, imagens e músicas.
Ler
120 por minuto
Tarefas, saldo e modelos. Contados separadamente dos envios.
Execuções simultâneas
3
Tarefas por conta renderizando ao mesmo tempo.
Cabeçalhos de limite de taxa
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 42

Modelos

Os modelos que você pode usar hoje com seus slugs e o menor preço. O endpoint de modelos retorna a mesma lista com todas as opções.

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

Pronto para criar?

Crie uma chave na sua conta e envie sua primeira solicitação em um minuto.

Criar uma chave API