API Aberta

API de geração de vídeo Seedance

Chame a geração de vídeo Seedance (Volcengine Ark) pela LMU AI com o protocolo assíncrono nativo: crie, consulte, liste e cancele tarefas, além de um exemplo completo de polling.

A geração de vídeo Seedance (Volcengine Ark) usa o protocolo assíncrono nativo do fornecedor: substitua o endereço no SDK oficial ou no comando curl pelo endereço da LMU AI e a chave pela sua chave de API da LMU AI; o corpo da requisição permanece inalterado. Para as regras comuns de autenticação, cobrança e marcas d'água, limites de concorrência e códigos de erro, consulte a visão geral da API de geração de vídeo.

URL base

https://api.lmuai.com
OperaçãoEndpoint
Criar uma tarefaPOST /api/v3/contents/generations/tasks
Consultar uma tarefaGET /api/v3/contents/generations/tasks/{id}
Listar tarefasGET /api/v3/contents/generations/tasks
Cancelar / excluirDELETE /api/v3/contents/generations/tasks/{id}

A geração de vídeo deve estar habilitada para o seu grupo

O grupo da chave de API deve ter a "Geração de vídeo" habilitada; caso contrário, as chamadas retornam 403. O nome do modelo deve corresponder exatamente ao nome habilitado para o seu grupo (diferencia maiúsculas de minúsculas); verifique os modelos disponíveis com GET /v1/models.

1. Criar uma tarefa

POST /api/v3/contents/generations/tasks

ParâmetroTipoObrigatórioDescrição
modelstringSimNome do modelo; deve corresponder exatamente ao nome habilitado para o seu grupo (diferencia maiúsculas de minúsculas)
contentarraySimConteúdo de entrada. Texto: {"type":"text","text":"…"}; imagem de referência: {"type":"image_url","image_url":{"url":"…"},"role":"first_frame"}, em que role pode ser first_frame (primeiro quadro) ou reference_image (imagem de referência)
resolutionstringNãoNível de resolução: 480p / 720p / 1080p
durationintegerNãoDuração do vídeo em segundos
ratiostringNãoProporção: 16:9 / 9:16 / 1:1 / 4:3
generate_audiobooleanNãoSe deve gerar áudio também
curl https://api.lmuai.com/api/v3/contents/generations/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.5",
    "content": [
      {"type": "text", "text": "Waves gently lapping the beach at dusk, slow motion"}
    ],
    "resolution": "720p",
    "duration": 5,
    "ratio": "16:9",
    "generate_audio": true
  }'
import requests

BASE = "https://api.lmuai.com"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

resp = requests.post(f"{BASE}/api/v3/contents/generations/tasks", headers=HEADERS, json={
    "model": "seedance-2.5",
    "content": [{"type": "text", "text": "Waves gently lapping the beach at dusk, slow motion"}],
    "resolution": "720p",
    "duration": 5,
    "ratio": "16:9",
    "generate_audio": True,
})
resp.raise_for_status()
task_id = resp.json()["id"]
print(task_id)
const BASE = "https://api.lmuai.com";
const headers = {
  Authorization: "Bearer YOUR_API_KEY",
  "Content-Type": "application/json",
};

const resp = await fetch(`${BASE}/api/v3/contents/generations/tasks`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "seedance-2.5",
    content: [{ type: "text", text: "Waves gently lapping the beach at dusk, slow motion" }],
    resolution: "720p",
    duration: 5,
    ratio: "16:9",
    generate_audio: true,
  }),
});
const data = await resp.json();
console.log(data.id);

Resposta:

{
  "id": "cgt-20261022103211-ab12c"
}

Para usar uma imagem de referência de primeiro quadro, adicione um item de imagem a content:

{
  "model": "seedance-2.5",
  "content": [
    {"type": "text", "text": "The camera slowly pushes in as waves gently lap the beach"},
    {"type": "image_url", "image_url": {"url": "https://example.com/first-frame.png"}, "role": "first_frame"}
  ],
  "resolution": "720p",
  "duration": 5
}

Observações

  • No modo de primeiro quadro (role igual a first_frame), não envie ratio: a proporção segue a imagem do primeiro quadro, e o upstream rejeita a requisição com 400 se você enviá-lo.
  • O callback_url não é repassado ao upstream; você não receberá um callback mesmo que o passe. Use polling em vez disso.

2. Consultar uma tarefa

GET /api/v3/contents/generations/tasks/{id}

Valores de status: queued → running → succeeded / failed / cancelled. Em caso de sucesso, a URL do vídeo fica em content.video_url.

curl https://api.lmuai.com/api/v3/contents/generations/tasks/TASK_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Resposta (sucesso):

{
  "id": "cgt-20261022103211-ab12c",
  "model": "seedance-2.5",
  "status": "succeeded",
  "content": {
    "video_url": "https://…/video.mp4"
  },
  "usage": {
    "completion_tokens": 108900,
    "total_tokens": 108900
  },
  "created_at": 1792629131,
  "updated_at": 1792629262
}

3. Listar tarefas

GET /api/v3/contents/generations/tasks?limit=20&offset=0

Retorna as tarefas criadas com a chave de API atual (limit de 1 a 100, padrão 20). A resposta é {object, data[], has_more}. Os registros das tarefas continuam consultáveis depois que o link do vídeo expira.

4. Cancelar / excluir

DELETE /api/v3/contents/generations/tasks/{id}

  • Tarefas ainda na fila (queued) podem ser canceladas sem custo.
  • Tarefas que já começaram a ser geradas (running) não podem ser canceladas e retornam 409.
  • Tarefas concluídas podem ter seu registro no upstream excluído, sem reembolso.

5. Exemplo completo: criar e fazer polling

import time, requests

BASE = "https://api.lmuai.com"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

# 1. Create the task
resp = requests.post(f"{BASE}/api/v3/contents/generations/tasks", headers=HEADERS, json={
    "model": "seedance-2.5",
    "content": [{"type": "text", "text": "Waves gently lapping the beach at dusk, slow motion"}],
    "resolution": "720p", "duration": 5, "ratio": "16:9",
})
resp.raise_for_status()
task_id = resp.json()["id"]

# 2. Poll until a final state (every 10 seconds)
while True:
    task = requests.get(f"{BASE}/api/v3/contents/generations/tasks/{task_id}", headers=HEADERS).json()
    status = task["status"]
    if status in ("succeeded", "failed", "cancelled", "canceled", "expired"):
        break
    time.sleep(10)

# 3. Download (the link is valid for 24 hours)
if status == "succeeded":
    url = task["content"]["video_url"]
    with open(f"{task_id}.mp4", "wb") as f:
        f.write(requests.get(url).content)
else:
    print("Generation failed:", task)

6. Cobrança e códigos de erro

O Seedance é cobrado por tokens de saída. Um valor estimado é congelado quando a tarefa é criada, e saldo insuficiente retorna 402; em caso de sucesso, a tarefa é liquidada conforme o uso real, e tarefas com falha e canceladas são totalmente reembolsadas. Cada usuário e cada chave de API pode ter no máximo 5 tarefas sendo geradas ao mesmo tempo; acima disso, as requisições retornam 429.

Para as regras completas, consulte Cobrança e marcas d'água, Limites de concorrência e Códigos de erro na visão geral. Para o outro fornecedor, consulte a API de geração de vídeo Wan.

Última atualização:

Nesta página