Vídeos de 30s, mais de 50 referências. Experimente agora

SeeGen AI API

Bem-vindo à API da SeeGen AI — uma única API para geração de vídeo cinematográfico e imagens de alta fidelidade em vários modelos líderes.

Visão geral

A SeeGen AI é uma API de geração unificada: um conjunto consistente de endpoints para executar vários modelos líderes de vídeo e imagem por IA. Escolha um modelo com o parâmetro model — autenticação, envio de tarefas, consulta de status e webhooks funcionam da mesma forma em todos eles.

Modelos disponíveis no momento:

  • Vídeo — Seedance 2.0 Pro (sd2), Seedance 2.0 Fast (sd2-fast), Seedance 2.0 Mini (sd2-mini), Seedance 2.5 (sd2.5), HappyHorse 1.1 (happyhorse)
  • Imagem — GPT Image 2 (gpt-image-2), Nano Banana 2 (nano-banana-2), Nano Banana Pro (nano-banana-pro), Seedream 5.0 Lite (seedream-v5.0-lite), Seedream 5.0 Pro (seedream-v5.0-pro)

URL base: https://seegen.ai/api/v1

Modelo: informe qualquer um dos aliases acima no campo model (por exemplo, sd2, gpt-image-2).

Por que SeeGen AI?

Mais motivos para escolher a SeeGen AI:

  • Muito mais do que Seedance 2.0: HappyHorse 1.1, Nano Banana, ChatGPT Image e outros.
  • Nenhuma assinatura necessária — pague conforme o uso
  • Acesso rápido aos modelos mais recentes
  • Suporte ao cliente 24 horas por dia, 7 dias por semana
  • Suporte para consultas oficiais relacionadas aos modelos
  • Acesso ao console para desenvolvedores
  • Aberto tanto para empresas quanto para usuários individuais

Preços

40% OFF

API Pack

$500$833

125,000 créditos ($0.004/crédito)

~781 vídeos de 5s

40% OFF

API-XL Pack

$2,000$3,332

500,000 créditos ($0.004/crédito)

~3,125 vídeos de 5s

Seedance 2.0 / Fast / Mini / 2.5 — cálculo de custo

Considere out = output_seconds e in = a soma de ⌈duration⌉ de cada vídeo de entrada (cada um arredondado para cima, mínimo out × 2/3). Seedance 2.5 segue o mesmo cálculo que Seedance 2.0. A taxa base do modelo correspondente é multiplicada por 1.5 e arredondada antes de aplicar a fórmula da tarefa (1080P é nativo no sd2.5, 2,5× sua taxa de 720P); os adicionais de upscale independentes de modelo permanecem em +30 / +40 créditos por segundo de saída para 2K / 4K (+20 para 1080P apenas em sd2-fast / sd2-mini).

Sem vídeo de entradaCom vídeo de entrada
sd2.5: 480P30 × out23 × (out + in)
sd2.5: 720P60 × out45 × (out + in)
sd2.5: 1080P (nativo)150 × out113 × (out + in)
sd2.5: 2K(60 + 30) × out45 × (out + in) + 30 × out
sd2.5: 4K(60 + 40) × out45 × (out + in) + 40 × out
sd2-pro: 480P20 × out15 × (out + in)
sd2-pro: 720P40 × out30 × (out + in)
sd2-pro: 1080P (nativo)100 × out75 × (out + in)
sd2-pro: 2K(40 + 30) × out30 × (out + in) + 30 × out
sd2-pro: 4K (nativo)200 × out150 × (out + in)
sd2-fast: 480P16 × out12 × (out + in)
sd2-fast: 720P32 × out24 × (out + in)
sd2-fast: 1080P(32 + 20) × out24 × (out + in) + 20 × out
sd2-fast: 2K(32 + 30) × out24 × (out + in) + 30 × out
sd2-fast: 4K(32 + 40) × out24 × (out + in) + 40 × out
sd2-mini: 480P10 × out7.5 × (out + in)
sd2-mini: 720P20 × out15 × (out + in)
sd2-mini: 1080P(20 + 20) × out15 × (out + in) + 20 × out
sd2-mini: 2K(20 + 30) × out15 × (out + in) + 30 × out
sd2-mini: 4K(20 + 40) × out15 × (out + in) + 40 × out

Observação: sd2-pro 1080P e 4K são saída oficial nativa (4K = 5× a taxa de 720P); sd2-pro 2K e todos os modos 1080P/2K/4K de sd2-fast / sd2-mini recebem upscale da SeeGen AI. sd2.5 gera nativamente em 480P/720P/1080P (1080P = 2,5× a taxa de 720P, sem adicional de upscale) e usa upscale automático para 2K/4K. Solicite qualquer nível via outputResolution: "4k" (por exemplo, "2k" / "4k"; o gateway escolhe automaticamente entre nativo e upscale — apenas o preço e o rótulo Native diferem). sd2-mini custa 50% de sd2-pro — o nível mais barato. Seedance 2.5 usa o arredondamento de duração por vídeo, o piso mínimo de duração de entrada e o cálculo de upscale de Seedance 2.0. A taxa base do modelo correspondente é multiplicada por 1.5 e arredondada antes do cálculo da tarefa (por exemplo, 1080P com vídeo: 75 × 1.5 → 113). Os adicionais de upscale 2K / 4K independentes de modelo permanecem em +30 / +40 créditos por segundo de saída. Se o upscale falhar, a tarefa concluída retorna o fallback em 720P sem reembolso parcial de créditos.

  • sd2.5 480P, saída de 4 segundos sem vídeo de entrada: 120 créditos
  • sd2.5 720P, saída de 5 segundos sem vídeo de entrada: 300 créditos
  • sd2.5 720P, saída de 5 segundos + vídeo de entrada de 3 segundos (mínimo de entrada de 4 segundos): 405 créditos
  • sd2.5 1080P nativo, saída de 5 segundos sem vídeo de entrada: 750 créditos
  • sd2.5 1080P nativo, saída de 5 segundos + vídeo de entrada de 5 segundos: 1,130 créditos

happyhorse — créditos por segundo

SaídaCréditos / segExemplo de 5s
720P32160
1080P60300
2K32 + 30310
4K32 + 40360

Observação: o upscale 2K / 4K é somado à base de 720P (não se acumula com o 1080P nativo). t2v / i2v / r2v compartilham a mesma taxa por segundo — imagens de referência não são cobradas.

🎉 Oferta por tempo limitado: 33% de desconto em toda a geração de imagens — todos os preços de imagens abaixo já estão com desconto aplicado.

gpt-image-2 — créditos por imagem

ResoluçãoQualidade médiaAlta qualidade
1k10154770
2k (padrão)233584125
4k4060154230

Cada tarefa produz 1 imagem. Envie N tarefas para obter N variações. Tarefas com falha reembolsam créditos automaticamente.

nano-banana-2 e nano-banana-pro — créditos por imagem

Resoluçãonano-banana-2nano-banana-pro
1k20304060
2k (padrão)30454060
4k477074110

Cada tarefa produz 1 imagem. Envie N tarefas para obter N variações. Tarefas com falha reembolsam créditos automaticamente.

Seedream 5.0 — créditos por imagem

Modelo / nívelCréditos
Lite 2k / 4k (taxa fixa)710
Pro 1k (padrão)1015
Pro 2k2030

Cada tarefa produz 1 imagem. Envie N tarefas para obter N variações. Tarefas com falha reembolsam créditos automaticamente. As imagens de referência não são cobradas separadamente.

Verifique seu saldo: GET /api/v1/account/credits

Autenticação

Todas as requisições da API exigem um token Bearer no cabeçalho Authorization. Você pode criar e gerenciar chaves de API em Configurações da conta.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://seegen.ai/api/v1/account/credits

Importante: sua chave de API é exibida apenas uma vez, no momento da criação. Guarde-a com segurança. Você pode criar até 10 chaves de API por conta.

Início rápido

Gere um vídeo em duas etapas: crie uma tarefa e depois consulte o resultado.

# 1. Create a text-to-video task
TASK_ID=$(curl -s -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "prompt": "A golden retriever running on the beach at sunset",
      "duration": "5s",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask | jq -r '.taskId')

echo "Task created: $TASK_ID"

# 2. Poll for result
while true; do
  RESULT=$(curl -s -H "Authorization: Bearer $API_KEY" \
    "https://seegen.ai/api/v1/jobs/queryTask?taskId=$TASK_ID")
  STATUS=$(echo $RESULT | jq -r '.status')
  echo "Status: $STATUS"
  if [ "$STATUS" = "COMPLETED" ] || [ "$STATUS" = "FAILED" ]; then
    echo $RESULT | jq .
    break
  fi
  sleep 5
done

Endpoints

POST/api/v1/jobs/createTask

Criar uma nova tarefa de geração de vídeo

GET/api/v1/jobs/queryTask

Consultar status e resultado da tarefa

GET/api/v1/account/credits

Verificar seu saldo de créditos

POST/api/v1/assets/upload

Enviar um asset (imagem/vídeo/áudio) para revisão

GET/api/v1/assets/status

Consultar status de revisão do asset

GET/api/v1/assets/list

Listar seus assets enviados

POST/api/v1/upscale/create

Enviar uma tarefa independente de upscale de vídeo (720p / 1080p / 2K / 4K)

GET/api/v1/upscale/query

Consultar status e resultado de uma tarefa independente de upscale

Escolha um modelo (vídeo)

Duas famílias de modelos geram vídeo. Escolha por modo + preço; combine com a seção Preços para estimar o custo.

ModeloT2VI2VFirst–LastMulti-RefR2VNativo 1080pNativo 4KÁudio720p / 5s
sd2.5upscale300 créditos
sd2200 créditos
sd2-fastupscaleupscale160 créditos
sd2-miniupscaleupscale100 créditos
happyhorseupscale160 créditos

T2V = texto para vídeo · I2V = imagem para vídeo (primeiro quadro) · First–Last = primeiro + último keyframe · Multi-Ref = referências mistas de imagem / vídeo / áudio · R2V = 1–9 imagens de referência com marcadores de personagem

Seedance 2.0 / 2.0 Fast / 2.0 Mini / Seedance 2.5

Texto para vídeo

Gere um vídeo a partir de um prompt de texto. Não é necessária nenhuma imagem.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "prompt": "A futuristic city with flying cars at night, neon lights reflecting on wet streets",
      "duration": "5s",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
ParâmetroTipoObrigatórioDescrição
promptstringSimDescrição textual do vídeo a ser gerado. Máximo de 20000 caracteres.
durationstringNãoDuração do vídeo: de "4s" a "15s"; sd2.5 aceita até "30s" (padrão: "5s")
resolutionstringNãoProporção definida via resolução. Opções: auto (padrão), 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540
outputResolutionstringNãoNível de resolução de saída: "480p", "720p" (padrão), "1080p", "2k" ou "4k". As resoluções nativas variam por modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Níveis mais altos recebem upscale automaticamente.
seedintNãoSeed de reprodutibilidade: -1 ou omita para aleatório; 0–2147483647 para fixo.
generateAudiobooleanNãoSe deve sintetizar uma trilha de áudio sincronizada. Padrão true; envie false para vídeo sem áudio.

Imagem para vídeo

Anime uma imagem estática em um vídeo. Informe uma URL de imagem como quadro inicial.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": ["https://example.com/photo.jpg"],  // or "asset://asset-20260326-abc123"
      "prompt": "The woman slowly turns her head and smiles",
      "duration": "5s"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
ParâmetroTipoObrigatórioDescrição
urlsstring[]SimArray com uma URL de imagem (o quadro de origem). Aceita tanto URLs HTTP quanto referências de asset (por exemplo, "asset://asset-20260326-abc123")
promptstringNãoDescrição textual do movimento desejado
durationstringNãoDuração do vídeo: de "4s" a "15s"; sd2.5 aceita até "30s" (padrão: "5s")
outputResolutionstringNãoNível de resolução de saída: "480p", "720p" (padrão), "1080p", "2k" ou "4k". As resoluções nativas variam por modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Níveis mais altos recebem upscale automaticamente.
seedintNãoSeed de reprodutibilidade: -1 ou omita para aleatório; 0–2147483647 para fixo.
generateAudiobooleanNãoSe deve sintetizar uma trilha de áudio sincronizada. Padrão true; envie false para vídeo sem áudio.

Primeiro e último quadro

Defina os quadros inicial e final, e o modelo gera a transição entre eles. Usa videoInputMode: "keyframe".

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": [
        "https://example.com/first-frame.jpg",
        "https://example.com/last-frame.jpg"
      ],
      "prompt": "Smooth camera transition from day to night",
      "duration": "5s",
      "videoInputMode": "keyframe"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
ParâmetroTipoObrigatórioDescrição
urlsstring[]SimArray com exatamente 2 URLs de imagem: [first_frame, last_frame]. Aceita tanto URLs HTTP quanto referências de asset (por exemplo, "asset://asset-20260326-abc123")
videoInputModestringSimDeve ser "keyframe"
promptstringNãoDescrição textual que orienta a transição
durationstringNãoDuração do vídeo: de "4s" a "15s"; sd2.5 aceita até "30s" (padrão: "5s")
outputResolutionstringNãoNível de resolução de saída: "480p", "720p" (padrão), "1080p", "2k" ou "4k". As resoluções nativas variam por modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Níveis mais altos recebem upscale automaticamente.
seedintNãoSeed de reprodutibilidade: -1 ou omita para aleatório; 0–2147483647 para fixo.
generateAudiobooleanNãoSe deve sintetizar uma trilha de áudio sincronizada. Padrão true; envie false para vídeo sem áudio.

Multirreferência

Use várias imagens, vídeos e arquivos de áudio de referência para orientar a geração. Usa videoInputMode: "reference". No sd2.5, esta é a subtarefa de referência padrão; para editar ou continuar um vídeo existente, veja Editar e estender vídeo abaixo.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": [
        "https://example.com/ref1.jpg",
        "https://example.com/ref2.jpg"
      ],
      "videoUrls": ["asset://asset-motion-video"],
      "audioUrls": ["https://example.com/audio.mp3"],
      "prompt": "Character walks through a garden",
      "duration": "5s",
      "videoInputMode": "reference",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
ParâmetroTipoObrigatórioDescrição
urlsstring[]NãoURLs de imagens de referência (máximo 9). Aceita tanto URLs HTTP quanto referências de asset (por exemplo, "asset://asset-20260326-abc123")
videoUrlsstring[]NãoURIs de vídeo de referência asset:// — envie primeiro via /api/v1/assets/upload; URLs externas são rejeitadas. sd2: máximo de 3 vídeos, cada um ≤15s. sd2.5: até 10 vídeos, cada um 2–30s e ≤200MB, duração total de referência ≤30s, entradas de 480p–4K suportadas.
audioUrlsstring[]NãoEntradas de áudio de referência. sd2 / sd2-fast / sd2-mini: até 3 arquivos de áudio, cada um 2–15s, total ≤15s — áudio não pode ser a única referência nesses modelos (adicione ao menos uma imagem ou vídeo). sd2.5: até 10 arquivos, ≤15MB e 2–30s cada, total ≤30s, e entrada somente com áudio é suportada.
videoInputModestringSimDeve ser "reference"
promptstringNãoDescrição textual
durationstringNãoDuração do vídeo: de "4s" a "15s"; sd2.5 aceita até "30s" (padrão: "5s")
resolutionstringSimObrigatório para o modo reference. Opções: 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540
outputResolutionstringNãoNível de resolução de saída: "480p", "720p" (padrão), "1080p", "2k" ou "4k". As resoluções nativas variam por modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Níveis mais altos recebem upscale automaticamente.
seedintNãoSeed de reprodutibilidade: -1 ou omita para aleatório; 0–2147483647 para fixo.
generateAudiobooleanNãoSe deve sintetizar uma trilha de áudio sincronizada. Padrão true; envie false para vídeo sem áudio.

Restrições de referência

  • Máximo de 9 imagens, 3 vídeos, 3 arquivos de áudio
  • Máximo de 12 arquivos no total, somando todos os tipos
  • Cada vídeo/áudio deve ter ≤ 15 segundos
  • As imagens devem ter no mínimo 400px no lado mais curto
  • sd2.5: máximo de 30 imagens, 10 vídeos, 10 arquivos de áudio e 50 no total; a duração total de vídeo e de áudio é, cada uma, ≤ 30 segundos

Editar e estender vídeo

O sd2.5 divide a geração baseada em referência em três subtarefas. Omita mode para geração de referência comum, defina mode: "edit" para editar um vídeo existente, ou mode: "extend" para continuá-lo. Ambos exigem pelo menos um vídeo em videoUrls e sempre geram saída com a proporção do vídeo de origem.

Coloque o vídeo que deseja operar em primeiro lugar em videoUrls e refira-se a ele como "Video 1" no seu prompt. edit força a duração da saída a corresponder à desse primeiro vídeo (de origem), que deve ter 4–30s, portanto qualquer duration enviado é ignorado; a cobrança usa a duração do vídeo de origem como duração de saída, além de todos os vídeos de referência como entrada. extend aceita de 1 a 3 clipes unidos em ordem, e o duration solicitado é a duração de saída desta geração (sem relação com a duração de origem) — cobrado como uma geração de referência comum.

Os modelos da família 2.0 (sd2 / sd2-fast / sd2-mini) também aceitam mode: "edit" e mode: "extend": eles inferem a operação a partir do seu prompt (descreva explicitamente a edição ou continuação), a proporção segue o vídeo de origem, e duration permanece sob seu controle, com cobrança comum.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2.5",
    "inputs": {
      "mode": "edit",
      "videoUrls": ["asset://asset-source-video"],
      "urls": ["https://example.com/annotation-at-1.2s.png"],
      "source_frame_timestamps_ms": [1200],
      "prompt": "Replace the marked object with a red umbrella",
      "outputResolution": "720p"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
ParâmetroTipoObrigatórioDescrição
modestringNão"edit" ou "extend". Omita para geração de referência comum.
videoUrlsstring[]SimPelo menos um vídeo; o primeiro é a origem ("Video 1") — a duração de saída e a cobrança do edit seguem esse vídeo. Vídeos seguintes são referências extras (edit) ou clipes adicionais unidos em ordem (extend, máximo 3).
urlsstring[]NãoImagens opcionais de anotação/referência.
source_frame_timestamps_msnumber[]Nãosomente para mode "edit". Um timestamp não negativo do vídeo de origem, em milissegundos, por imagem em urls.
outputResolutionstringNãoNível de resolução de saída: "480p", "720p" (padrão), "1080p", "2k" ou "4k". As resoluções nativas variam por modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Níveis mais altos recebem upscale automaticamente.

Referência de parâmetros do Seedance

Referência completa de todos os parâmetros inputs para os modelos sd2 / sd2-fast / sd2-mini / sd2.5.

ParâmetroTipoObrigatórioDescrição
promptstringNãoDescrição textual (obrigatória para text-to-video, opcional para os demais modos). Máximo de 20000 caracteres.
urlsstring[]NãoURLs de imagem. Aceita tanto URLs HTTP quanto referências de asset (por exemplo, "asset://asset-20260326-abc123"). Mapeado internamente para uploadedUrls.
videoUrlsstring[]NãoURIs de vídeo de referência asset:// (somente no modo reference). Devem ser enviados primeiro via /api/v1/assets/upload — URLs externas são rejeitadas.
audioUrlsstring[]NãoURLs de áudio de referência (somente no modo reference). Entrada somente com áudio é suportada no sd2.5; sd2 / sd2-fast / sd2-mini exigem pelo menos uma imagem ou vídeo além do áudio.
durationstringNãonormalmente de "4s" a "15s"; sd2.5 aceita até "30s". Padrão: "5s"
resolutionstringNãoProporção: auto (padrão) | 720x720 | 720x960 | 960x720 | 1280x720 | 720x1280 | 1280x540
outputResolutionstringNãoNível de resolução de saída: "480p", "720p" (padrão), "1080p", "2k" ou "4k". As resoluções nativas variam por modelo: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Níveis mais altos recebem upscale automaticamente.
videoInputModestringNão"keyframe" (padrão) ou "reference"
modestringNãoSubtarefa do modo reference (todos os modelos Seedance): omita para geração de referência comum, "edit" para editar o primeiro vídeo em videoUrls, "extend" para continuar 1-3 clipes. Veja Editar e estender vídeo.
source_frame_timestamps_msnumber[]Nãosomente para sd2.5 Video Edit: um timestamp não negativo em milissegundos por imagem de anotação.
seedintNãoSeed aleatório para reprodutibilidade. -1 ou omita para aleatório no servidor. O mesmo seed + as mesmas entradas geram uma saída bastante semelhante (não idêntica bit a bit, devido ao não determinismo da GPU). Intervalo: -1 a 2147483647.
generateAudiobooleanNãoSe deve sintetizar uma trilha de áudio (fala, efeitos sonoros, música de fundo) sincronizada com o vídeo. Padrão true. Defina false para gerar um vídeo sem áudio — um pouco mais rápido, útil se você planeja dublar separadamente.
bitrateModestringNãoNível de taxa de bits de saída na mesma resolução: "standard" (padrão) ou "high". "high" preserva mais detalhes e reduz banding / blocos em cerca de 3-5× o tamanho do arquivo — não altera a resolução nem o preço.
upscaleResolutionstringNão(Obsoleto) Campo separado legado, ainda aceito por compatibilidade retroativa. Novas integrações devem usar outputResolution, que agora aceita "2k" / "4k" diretamente. Se ambos forem enviados, upscaleResolution tem precedência — exceto em modelos com 1080p nativo (Seedance2 Pro / Seedance 2.5), onde upscaleResolution:"1080p" resolve para 1080p nativo (cobrado na taxa nativa).

Campos de nível superior da requisição: model (obrigatório), inputs (obrigatório), callBackUrl (URL de webhook opcional).

Assets

Assets são imagens, vídeos e arquivos de áudio que passam por um processo de revisão antes de poderem ser usados em tarefas de geração de vídeo. Envie um asset, aguarde até que ele fique ACTIVE e então use sua URL asset:// em suas tarefas.

Observação: assets de imagem e vídeo com pessoas reais exigem revisão oficial, normalmente concluída em segundos. Uma vez aprovados, podem ser usados diretamente como referências. Sem revisão, a geração pode falhar.

Enviar asset

Duas formas de enviar: enviar um arquivo local diretamente (multipart/form-data) ou informar uma URL HTTPS acessível publicamente. Em ambos os casos, o asset é processado e revisado automaticamente.

Método A — envio direto de arquivo (multipart/form-data)

Envie um arquivo local sem necessidade de hospedagem de imagem. O tipo de mídia é detectado a partir dos bytes do arquivo (a extensão do nome do arquivo não é confiável). Permitido: imagens (jpg/png/webp/gif/bmp/tiff/heic), vídeos (mp4/mov), áudio (wav/mp3). Máximo de 50MB por arquivo (imagem ≤30MB, vídeo ≤50MB, áudio ≤15MB).

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/path/to/photo.jpg" \
  -F "name=my-photo" \
  https://seegen.ai/api/v1/assets/upload
ParâmetroTipoObrigatórioDescrição
filefileSimO arquivo local (campo do formulário multipart). O tipo de mídia é detectado a partir do conteúdo.
namestringNãoNome do asset (máximo de 64 caracteres)

Método B — por URL (application/json)

Se o arquivo já estiver hospedado em uma URL HTTPS pública.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/photo.jpg",
    "type": "IMAGE",
    "name": "my-photo"
  }' \
  https://seegen.ai/api/v1/assets/upload
ParâmetroTipoObrigatórioDescrição
urlstringSimURL HTTPS publicamente acessível do arquivo a ser enviado
typestringSim"IMAGE", "AUDIO" ou "VIDEO"
namestringNãoNome do asset (máximo de 64 caracteres)

Resposta do envio

{
  "assetId": 123,
  "volcAssetId": "asset-20260326-abc123",
  "type": "IMAGE",
  "status": "PROCESSING",
  "failReason": null,
  "url": "https://example.com/photo.jpg",
  "name": "my-photo",
  "createdAt": 1711234567890
}

Consultar status do asset

Consulte o status de revisão de um asset. Quando o status é PROCESSING, o endpoint verifica automaticamente atualizações do sistema de revisão.

# Query by asset ID (numeric)
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/status?assetId=123"

# Query by volcAssetId (string)
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/status?assetId=asset-20260326-abc123"

Valores de status do asset

  • PROCESSINGem revisão, ainda não utilizável
  • ACTIVErevisão aprovada, pronto para uso em tarefas
  • FAILEDrevisão falhou, verifique failReason

Listar assets

Lista seus assets enviados com filtragem opcional por tipo e status. Suporta paginação baseada em cursor.

# List all assets
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list"

# Filter by type and status
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list?type=IMAGE&status=ACTIVE&limit=10"

# Paginate with cursor
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list?cursor=100&limit=20"
ParâmetroTipoObrigatórioDescrição
typestringNãoFiltrar por tipo: "IMAGE", "AUDIO" ou "VIDEO"
statusstringNãoFiltrar por status: "NONE", "PROCESSING", "ACTIVE" ou "FAILED"
cursornumberNãoCursor para paginação (use nextCursor da resposta anterior)
limitnumberNãoItens por página, 1-50 (padrão: 20)

Resposta da listagem

{
  "items": [
    {
      "assetId": 123,
      "volcAssetId": "asset-20260326-abc123",
      "type": "IMAGE",
      "status": "ACTIVE",
      "failReason": null,
      "url": "https://example.com/photo.jpg",
      "name": "my-photo",
      "width": 1920,
      "height": 1080,
      "size": 245000,
      "duration": null,
      "createdAt": 1711234567890
    }
  ],
  "nextCursor": 122
}

Usando assets em tarefas

Assim que um asset estiver ACTIVE, use seu volcAssetId com o protocolo asset:// nas URLs da sua tarefa:

{
  "model": "sd2",
  "inputs": {
    "urls": ["asset://asset-20260326-abc123"],
    "prompt": "The person slowly looks up and smiles",
    "duration": "5s"
  }
}

HappyHorse 1.1 (Alibaba)

Um modelo alternativo de geração de vídeo da Alibaba DashScope. Suporta três modos: text-to-video, image-to-video pelo primeiro quadro e reference-to-video (1–9 imagens de referência combinadas por prompt; refira-se aos sujeitos com character1, character2, … no prompt). O HappyHorse 1.1 não suporta último quadro, vídeo de referência nem áudio de referência. Nome do modelo: happyhorse.

Nenhuma revisão de asset necessária — você pode usar URLs HTTPS públicas de imagem diretamente, ou passar referências asset:// da biblioteca de assets (resolvidas automaticamente de volta à URL R2 original).

Texto para vídeo

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse",
    "inputs": {
      "prompt": "A panda DJ at a beach party, smoky sunset",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Imagem para vídeo (primeiro quadro)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse",
    "inputs": {
      "urls": ["https://example.com/panda.jpg"],
      "prompt": "The panda blinks and smiles",
      "duration": "5s",
      "outputResolution": "1080p"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Referência para vídeo (1–9 imagens de referência)

Passe videoWorkflowTab: "multi-reference" com 1–9 URLs de imagens de referência para combinar vários sujeitos em uma única saída. Referencie cada imagem no prompt com character1, character2, … (na ordem de urls). A proporção é controlada pelo campo ratio (não há primeiro quadro para derivá-la).

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse",
    "inputs": {
      "videoWorkflowTab": "multi-reference",
      "urls": [
        "https://example.com/character.jpg",
        "https://example.com/folding-fan.jpg",
        "https://example.com/earrings.jpg"
      ],
      "prompt": "A woman in red character1 opening folding fan character2, with tassel earrings character3 swinging",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Referência de parâmetros do HappyHorse

Referência completa de todos os parâmetros inputs para o modelo happyhorse.

ParâmetroTipoObrigatórioDescrição
promptstringNãoDescrição textual. Obrigatória para text-to-video e reference-to-video; opcional para image-to-video. Máximo de 5000 caracteres não-CJK ou 2500 caracteres CJK (o upstream trunca automaticamente além disso). Em r2v, use character1/character2/… para referenciar a N-ésima imagem de referência.
urlsstring[]Nãot2v: omita. i2v: exatamente 1 URL (usada como primeiro quadro). r2v: 1–9 URLs. Aceita URLs HTTPS públicas e referências de asset (por exemplo, "asset://asset-20260326-abc123").
videoWorkflowTabstringNãoDefina como "multi-reference" para ativar o modo reference-to-video (deve ser combinado com 1+ urls). Omita para text-to-video / image-to-video.
durationstringNãode "3s" a "15s" (padrão "5s").
outputResolutionstringNão"720p" (padrão) ou "1080p".
ratiostringNão"16:9" / "9:16" / "1:1" / "4:3" / "3:4". Usado para text-to-video e reference-to-video — a proporção do image-to-video é inferida a partir do primeiro quadro.
seedintNão0 a 2147483647. Deixe em branco para um seed aleatório.

Requisitos de imagem (i2v / r2v)

  • Lado mais curto ≥ 300px
  • Proporção entre 1:2.5 e 2.5:1
  • Formatos: JPEG, JPG, PNG, BMP, WEBP
  • Tamanho máximo de arquivo de 10MB por imagem (r2v: para cada uma das 1–9 entradas)

Escolha um modelo (imagem)

Os modelos de imagem recebem um prompt (e opcionalmente imagens de referência) e retornam uma imagem por tarefa. Cada requisição é cobrada por imagem, de acordo com o nível do modelo selecionado (ou uma taxa fixa para o Seedream Lite). Tarefas com falha são reembolsadas automaticamente. Não há parâmetro de lote — para gerar várias variações, chame createTask uma vez para cada imagem.

ModeloT2II2I (Edição)Multi-RefResolução máxima2k / medium
gpt-image-2até 104kveja Preços
nano-banana-2até 104kveja Preços
nano-banana-proaté 104kveja Preços
seedream-v5.0-liteaté 104ktaxa fixa
seedream-v5.0-proaté 102kveja Preços

GPT Image 2

O modelo GPT Image 2 da OpenAI para text-to-image e edição image-to-image de alta qualidade. Um único fluxo cobre ambos os modos — passe urls para alternar automaticamente para o modo de edição. A saída é entregue via R2 no formato solicitado (PNG / JPEG / WEBP). Nome do modelo: gpt-image-2.

Texto para imagem

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "quality": "medium",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Imagem para imagem (edição)

Passe de 1 a 10 imagens de referência via urls. O modelo as usará como contexto visual para a edição descrita em prompt.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "quality": "medium",
      "resolution": "1k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Referência de parâmetros do GPT Image 2

Referência completa de todos os parâmetros inputs para o modelo gpt-image-2.

ParâmetroTipoObrigatórioDescrição
promptstringSimDescrição textual da imagem a ser gerada, ou da edição a ser aplicada quando urls é informado.
urlsstring[]NãoURLs de imagens de referência para o modo image-to-image (edição) (1–10 imagens). Omita para text-to-image. URLs HTTPS públicas são aceitas.
qualitystringNão"medium" / "high". Padrão: "medium". Os créditos variam conforme o nível (veja Preços).
resolutionstringNão"1k" / "2k" / "4k". Padrão: "2k". Os créditos variam conforme o nível (veja Preços).
aspectRatiostringNão"1:1" / "16:9" / "9:16" / "4:3" / "3:4". Padrão: "1:1".
outputFormatstringNão"png" / "jpeg" / "webp". Padrão: "png".

Requisitos de imagem de entrada (modo image-to-image)

  • Até 10 imagens de referência por tarefa
  • Tamanho máximo de arquivo de 50 MB por imagem
  • Lado mais curto ≥ 256px
  • Proporção entre 1:3 e 3:1
  • Formatos: JPEG, JPG, PNG, WEBP

Os créditos por imagem variam conforme a resolução e a qualidade — veja a tabela completa na seção Preços.

Nano Banana 2

Nano Banana 2 é um modelo de imagem de alta fidelidade com cobertura de proporção mais ampla que gpt-image-2 — adiciona predefinições de retrato/paisagem (3:2, 2:3, 4:5, 5:4) e o cinematográfico 21:9. Um único fluxo cobre ambos os modos — passe urls para alternar automaticamente para o modo de edição. Nome do modelo: nano-banana-2.

Texto para imagem

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Imagem para imagem (edição)

Passe de 1 a 10 imagens de referência via urls. O modelo as usará como contexto visual para a edição descrita em prompt.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Referência de parâmetros do Nano Banana 2

Referência completa de todos os parâmetros inputs para o modelo nano-banana-2.

ParâmetroTipoObrigatórioDescrição
promptstringSimDescrição textual da imagem a ser gerada, ou da edição a ser aplicada quando urls é informado.
urlsstring[]NãoURLs de imagens de referência para o modo image-to-image (edição) (1–10 imagens). Omita para text-to-image. URLs HTTPS públicas são aceitas.
resolutionstringNão"1k" / "2k" / "4k". Padrão: "2k". Os créditos variam conforme o nível (veja Preços).
aspectRatiostringNão"1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". Padrão: "1:1".

Requisitos de imagem de entrada (modo image-to-image)

  • Até 10 imagens de referência por tarefa
  • Tamanho máximo de arquivo de 50 MB por imagem
  • Lado mais curto ≥ 256px
  • Proporção entre 1:3 e 3:1
  • Formatos: JPEG, JPG, PNG, WEBP

Os créditos por imagem variam conforme a resolução — veja a tabela completa na seção Preços.

Nano Banana Pro

Nano Banana Pro é um modelo de imagem de alta fidelidade com cobertura de proporção mais ampla que gpt-image-2 — adiciona predefinições de retrato/paisagem (3:2, 2:3, 4:5, 5:4) e o cinematográfico 21:9. Um único fluxo cobre ambos os modos — passe urls para alternar automaticamente para o modo de edição. Nome do modelo: nano-banana-pro.

Texto para imagem

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Imagem para imagem (edição)

Passe de 1 a 10 imagens de referência via urls. O modelo as usará como contexto visual para a edição descrita em prompt.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Referência de parâmetros do Nano Banana Pro

Referência completa de todos os parâmetros inputs para o modelo nano-banana-pro.

ParâmetroTipoObrigatórioDescrição
promptstringSimDescrição textual da imagem a ser gerada, ou da edição a ser aplicada quando urls é informado.
urlsstring[]NãoURLs de imagens de referência para o modo image-to-image (edição) (1–10 imagens). Omita para text-to-image. URLs HTTPS públicas são aceitas.
resolutionstringNão"1k" / "2k" / "4k". Padrão: "2k". Os créditos variam conforme o nível (veja Preços).
aspectRatiostringNão"1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". Padrão: "1:1".

Requisitos de imagem de entrada (modo image-to-image)

  • Até 10 imagens de referência por tarefa
  • Tamanho máximo de arquivo de 50 MB por imagem
  • Lado mais curto ≥ 256px
  • Proporção entre 1:3 e 3:1
  • Formatos: JPEG, JPG, PNG, WEBP

Os créditos por imagem variam conforme a resolução — veja a tabela completa na seção Preços.

Seedream 5.0 Lite

Geração rápida de text-to-image e image-to-image em 2K ou 4K com 15 proporções. Nome do modelo: seedream-v5.0-lite.

Texto para imagem

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-lite",
    "inputs": {
      "prompt": "A cinematic product photograph, soft studio light",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Imagem para imagem (edição)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-lite",
    "inputs": {
      "prompt": "Restyle the references as a premium fashion campaign",
      "urls": ["https://example.com/reference.png"],
      "resolution": "4k",
      "aspectRatio": "3:4"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Parâmetros do Seedream 5.0 Lite

ParâmetroTipoObrigatórioDescrição
promptstringSimDescrição da imagem ou instrução de edição.
urlsstring[]Não1–10 URLs HTTPS públicas de imagens de referência. Omita para text-to-image.
resolutionstringNão"2k" ou "4k". Padrão: "2k".
aspectRatiostringNão"1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", ou "21:9".

Seedream 5.0 Pro

Geração e edição de alta fidelidade em 1K ou 2K. Nome do modelo: seedream-v5.0-pro.

Texto para imagem

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-pro",
    "inputs": {
      "prompt": "Editorial portrait with dramatic rim lighting",
      "resolution": "2k",
      "aspectRatio": "3:4"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Imagem para imagem (edição)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-pro",
    "inputs": {
      "prompt": "Turn the reference into a cinematic poster",
      "urls": ["https://example.com/reference.png"],
      "resolution": "2k",
      "aspectRatio": "1:2"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Parâmetros do Seedream 5.0 Pro

ParâmetroTipoObrigatórioDescrição
promptstringSimDescrição da imagem ou instrução de edição.
urlsstring[]Não1–10 URLs HTTPS públicas de imagens de referência. Omita para text-to-image.
resolutionstringNão"1k" ou "2k". Padrão: "1k". 4k não é suportado.
aspectRatiostringNão"1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", ou "21:9".

Upscaler de vídeo

Criar tarefa

POST /api/v1/upscale/create

# source.url accepts ANY https video URL — your own CDN, OR a file you first
# uploaded to us via /api/v1/assets/upload (pass the r2Url it returns). No need
# to declare which: we detect it. External URLs are validated; our own are trusted.
curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source": { "type": "url", "url": "https://your-cdn.com/video.mp4" },
    "targetResolution": "2k",
    "callBackUrl": "https://your-server.com/webhook"
  }' \
  https://seegen.ai/api/v1/upscale/create
ParâmetroTipoObrigatórioDescrição
source.typestringSimUse "url" para qualquer origem. ("uploadId" é um alias legado mantido por compatibilidade retroativa.)
source.urlstringNãoCom type="url". Qualquer URL de vídeo https — seu próprio CDN, ou a r2Url retornada por /api/v1/assets/upload. Para URLs externas, http e IPs privados/internos são rejeitados (proteção contra SSRF); URLs em nosso próprio host de assets ignoram essa verificação.
source.r2UrlstringNãoLegado — apenas com type="uploadId" (compatibilidade retroativa). Novas integrações devem usar type="url".
targetResolutionstringSim"720p", "1080p", "2k" ou "4k". Deve ser maior que a resolução de origem.
callBackUrlstringNãoURL de webhook chamada uma vez ao atingir o estado final (completed ou failed).

Resposta de criação

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "orderId": "ord_2026...",
  "status": "validating"
}

Consultar status

GET /api/v1/upscale/query?taskId=...

O status avança por validatingprocessingcompleted / failed.

curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/upscale/query?taskId=n770mo4sh6rpi690ff3gwymx"

Resposta de conclusão

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "status": "completed",
  "targetResolution": "2k",
  "creditsConsumed": 900,
  "result": {
    "url": "https://static.seegen.ai/standalone-upscale/results/...mp4",
    "probedDurationSeconds": 30,
    "probedSourceResolution": "1280x720"
  },
  "error": null,
  "createdAt": "2026-04-29T01:23:45.000Z",
  "finishedAt": "2026-04-29T01:35:01.000Z"
}

Resposta de falha

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "status": "failed",
  "creditsConsumed": null,
  "result": null,
  "error": {
    "code": "SOURCE_RESOLUTION_TOO_HIGH",
    "message": "Source 3840x2160 is not below target 4k"
  }
}

Limites

  • Origem: URL https ou sua URL R2 enviada anteriormente
  • Duração de até 600 s (clipes com menos de 5 s são cobrados como 5 s)
  • Tamanho do arquivo ≤ 200 MB
  • Formato: MP4 / MOV / WebM
  • A resolução de origem deve ser menor que a de destino

Preços

  • 720P: 17 créditos/seg (5s = 85, 30s = 510)
  • 1080P: 25 créditos/seg (5s = 125, 30s = 750)
  • 2K: 38 créditos/seg (5s = 190, 30s = 1140)
  • 4K: 50 créditos/seg (5s = 250, 30s = 1500)
  • mínimo de 5 segundos; falhas reembolsam créditos automaticamente

Códigos de erro

Erros comuns sobre os quais você pode agir. Outras falhas retornam um campo message autoexplicativo — leia-o antes de presumir que o código é um destes.

CódigoSignificado
INVALID_URLA URL está malformada ou não é https
URL_NOT_REACHABLENão foi possível buscar a URL — verifique se ela é pública e acessível
UNSUPPORTED_MEDIA_TYPEO arquivo não é um vídeo, ou não está em MP4 / MOV / WebM
FILE_TOO_LARGEA origem excede 200 MB
DURATION_EXCEEDS_LIMITA origem tem mais de 600 s
SOURCE_RESOLUTION_TOO_HIGHA origem já está no nível do destino ou acima — escolha um destino mais alto
INSUFFICIENT_CREDITSCréditos insuficientes — recarregue e tente novamente

Callback de webhook

Em vez de fazer polling, você pode informar uma callBackUrl para receber os resultados automaticamente quando uma tarefa for concluída ou falhar.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "callBackUrl": "https://your-server.com/webhook/callback",
    "inputs": {
      "prompt": "A cat playing piano",
      "duration": "5s"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Payload do callback

Quando a tarefa termina, enviamos uma requisição POST para sua URL no mesmo formato da resposta do queryTask:

// POST to your callBackUrl
{
  "taskId": "task_abc123",
  "model": "sd2",
  "status": "COMPLETED",
  "creditsUsed": 200,
  "output": [
    {
      "url": "https://static.seegen.ai/videos/result.mp4",
      "width": 1280,
      "height": 720
    }
  ],
  "error": null,
  "createTime": 1711234567890,
  "completeTime": 1711234612345
}

Política de repetição: se seu endpoint retornar um status diferente de 2xx, tentamos novamente até 3 vezes com atrasos crescentes (1s, 5s, 30s).

Formato de resposta

Resposta do createTask

// 200 OK
{ "taskId": "task_abc123" }

Resposta do queryTask

{
  "taskId": "task_abc123",
  "model": "sd2",
  "status": "COMPLETED",     // "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED"
  "creditsUsed": 200,
  "output": [                // null when status is not "COMPLETED"
    {
      "url": "https://static.seegen.ai/videos/result.mp4",
      "width": 1280,
      "height": 720
    }
  ],
  "error": null,             // error message when status is "FAILED"
  "createTime": 1711234567890,
  "completeTime": 1711234612345
}

Resposta do credits

{
  "credits": 5000,
  "availableCredits": 4800
}

Tratamento de erros

Código de statusSignificadoAção
400Parâmetros inválidosVerifique a mensagem de erro e corrija sua requisição
401Chave de API inválida ou ausenteVerifique o formato do seu cabeçalho Authorization
402Créditos insuficientesCompre mais créditos em seegen.ai
403Acesso negadoVocê só pode consultar suas próprias tarefas
404Tarefa não encontradaVerifique se o taskId está correto
429Limite de simultaneidade (3 tarefas)Aguarde a conclusão das tarefas existentes
500Erro interno do servidorTente novamente após alguns segundos

Validação antes do envio (400 com código)

As requisições do Seedance são verificadas em relação ao contrato upstream antes de qualquer cobrança de créditos. Quando uma verificação falha, createTask retorna { "message": "...", "code": "..." } com HTTP 400, e nenhuma tarefa é criada. A mensagem indica exatamente qual limite foi atingido e como corrigi-lo.

ParâmetroTipoObrigatórioDescrição
EMPTY_CONTENTcodeNãoNenhum prompt e nenhuma imagem / vídeo / áudio de referência.
AUDIO_ONLY_NOT_SUPPORTEDcodeNãoO áudio é a única referência em sd2 / sd2-fast / sd2-mini. Adicione uma imagem ou vídeo, ou use sd2.5 (suporta somente áudio).
DURATION_OUT_OF_RANGEcodeNãoduration não é um número inteiro dentro do intervalo do modelo (família sd2 "4s"–"15s", sd2.5 "4s"–"30s").
EDIT_SOURCE_VIDEO_REQUIRED / EXTEND_SOURCE_VIDEO_REQUIREDcodeNãomode "edit" / "extend" foi solicitado sem um vídeo em videoUrls.
EDIT_SOURCE_DURATION_INVALIDcodeNãosd2.5 Video Edit: um vídeo na requisição é mais curto que 4s ou mais longo que 30s (o ARK aplica 4–30s a cada vídeo de uma tarefa edit).
TOO_MANY_REFERENCEScodeNãoMais imagens / vídeos / clipes de áudio de referência do que o modelo aceita (família sd2 9 / 3 / 3, sd2.5 30 / 10 / 10; extend ≤3 vídeos).
REFERENCE_VIDEO_DURATION_INVALIDcodeNãoUm vídeo de referência excede o máximo por clipe (família sd2 15s, sd2.5 30s) ou a duração total de referência excede o limite (15s / 30s).
ASSET_NOT_FOUND / EXTERNAL_URL / READ_TIMEOUT / READ_FAILEDcodeNãoUma entrada de videoUrls não pôde ser associada a nenhum dos seus assets enviados, ou sua duração não pôde ser lida.

Exemplos completos

Fluxo completo: envie um asset, aguarde a revisão, crie uma tarefa com o asset aprovado e consulte o resultado.

const API_KEY = process.env.API_KEY;
const BASE = "https://seegen.ai/api/v1";
const headers = {
  "Authorization": `Bearer ${API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Upload asset and wait for review
// (To upload a LOCAL file instead of a URL, POST multipart/form-data with a "file"
//  field — no Content-Type header, no "type" — see the Upload Asset section above.)
async function uploadAndWaitForAsset(url, type = "IMAGE") {
  const res = await fetch(`${BASE}/assets/upload`, {
    method: "POST",
    headers,
    body: JSON.stringify({ url, type }),
  });
  if (!res.ok) throw new Error(`Upload failed: ${(await res.json()).message}`);
  const asset = await res.json();
  console.log(`Asset uploaded: ${asset.assetId}, status: ${asset.status}`);

  // Poll until review completes
  while (true) {
    const statusRes = await fetch(
      `${BASE}/assets/status?assetId=${asset.assetId}`,
      { headers }
    );
    const status = await statusRes.json();
    if (status.status === "ACTIVE") {
      console.log(`Asset approved: asset://${status.volcAssetId}`);
      return status.volcAssetId;
    }
    if (status.status === "FAILED") {
      throw new Error(`Asset review failed: ${status.failReason}`);
    }
    await new Promise((r) => setTimeout(r, 3000));
  }
}

// 2. Create a task
async function createTask(inputs, callBackUrl) {
  const res = await fetch(`${BASE}/jobs/createTask`, {
    method: "POST",
    headers,
    body: JSON.stringify({
      model: "sd2",
      inputs,
      ...(callBackUrl && { callBackUrl }),
    }),
  });
  if (!res.ok) throw new Error(`[${res.status}] ${(await res.json()).message}`);
  return res.json();
}

// 3. Poll until done
async function waitForResult(taskId, timeoutMs = 300000) {
  const start = Date.now();
  while (Date.now() - start < timeoutMs) {
    const res = await fetch(
      `${BASE}/jobs/queryTask?taskId=${taskId}`,
      { headers }
    );
    const result = await res.json();
    if (result.status === "COMPLETED") return result;
    if (result.status === "FAILED") throw new Error(result.error);
    await new Promise((r) => setTimeout(r, 5000));
  }
  throw new Error("Timeout waiting for task");
}

// Full workflow: upload → review → generate → result
async function main() {
  // Upload image and wait for review
  const volcAssetId = await uploadAndWaitForAsset(
    "https://example.com/photo.jpg", "IMAGE"
  );

  // Create task with approved asset
  const { taskId } = await createTask({
    urls: [`asset://${volcAssetId}`],
    prompt: "The person slowly looks up and smiles",
    duration: "5s",
  });
  console.log(`Task: ${taskId}`);

  // Wait for video
  const result = await waitForResult(taskId);
  console.log(`Video: ${result.output[0].url}`);
}

main().catch(console.error);

Precisa de ajuda? Junte-se ao nosso Discord ou entre em contato conosco