Referência da API

Vídeos

POST/v1/videos
GET/v1/videos/{task_id}
GET/v1/videos/{task_id}/content

Geração de vídeo assíncrona (Seedance, Kling, Veo, Wan, Grok Imagine …). /v1/videos aceita entradas de texto para vídeo e de imagem para vídeo em uma única requisição no formato da OpenAI. Retorna um task_id para você consultar — ou registre um webhook no momento do envio.

#Parâmetros da requisição

  • modelstringobrigatório

    ID de um modelo de vídeo da página de modelos, por exemplo doubao-seedance-2.5.

  • promptstringobrigatório

    Descrição da cena; em image2video, direciona o movimento.

  • imagestringopcional

    Somente image2video: imagem do primeiro frame como URL ou base64.

  • imagesarrayopcional

    Frames de referência para provedores que aceitam várias imagens em uma tarefa.

  • durationnumberopcional

    Duração do clipe em segundos — uma dimensão da faixa de preço; valores suportados na ficha do modelo.

  • secondsnumberopcional

    Alias usado por algumas famílias de modelos para a duração do clipe; prefira o campo duration.

  • resolutionstringopcional

    Faixa de resolução da saída, como 720p ou 1080p, quando o modelo oferece.

  • sizestringopcional

    Seletor de proporção ou tamanho para famílias de modelos que usam tamanhos no estilo largura x altura.

  • webhook_urlstringopcional

    URL HTTPS chamada quando a tarefa chega a um estado final — veja o guia de vídeo para o contrato do callback.

  • webhook_secretstringopcional

    Se definido, as entregas trazem X-Xiaoxiang-Signature: sha256=hex(HMAC-SHA256(body, secret)).

Repasse de parâmetros do provedor

As famílias de modelos aceitam parâmetros extras do provedor (aspect_ratio, cfg_scale, negative_prompt …) que são repassados sem alteração — a ficha do modelo os documenta; campos desconhecidos são rejeitados no upstream, não pelo gateway.

Tarefas com falha são reembolsadas automaticamente

As tarefas de vídeo são cobradas antecipadamente no envio e reembolsadas integralmente se terminarem em failed — o registro contábil grava o reembolso com um link para a cobrança original.

#Cancelar uma tarefa em execução

DELETE/v1/videos/:task_id

Interrompe uma tarefa que ainda não chegou a um estado final. Em caso de sucesso, a cota reservada é reembolsada, a tarefa é registrada como failed com o motivo "cancelled by user", e qualquer webhook registrado dispara como task.failed.

A maioria dos provedores não permite cancelar

O cancelamento é repassado ao provedor upstream, e só alguns oferecem isso. Os demais respondem 501 task_cancel_not_supported. Trate o cancelamento como de melhor esforço na sua UI: continue consultando e não prometa reembolso ao usuário antes de a chamada retornar 200.
curl -X DELETE https://www.aisplice.store/v1/videos/task_xxx \
  -H "Authorization: Bearer sk-YOUR_KEY"
cancelled.json
{
  "id": "task_xxx",
  "task_id": "task_xxx",
  "status": "cancelled"
}

Note que "cancelled" aparece apenas nesta resposta. Uma consulta posterior informa a tarefa como failed, porque esse é o estado para o qual ela foi movida.

  • 404 task_not_existid de tarefa desconhecido, ou pertence a outra conta.
  • 409 task_not_cancellableA tarefa já terminou — não há nada para interromper.
  • 501 task_cancel_not_supportedEste provedor não oferece API de cancelamento.

Tabela completa de códigos de erro →

#Fazer remix de um vídeo existente

POST/v1/videos/:video_id/remix

Renderiza de novo um vídeo concluído com um novo prompt, nos modelos que oferecem isso. Envie prompt e nada mais: o modelo, a duração, a resolução e os fatores de preço são herdados da tarefa original, e a requisição fica vinculada ao canal que a produziu.

curl https://www.aisplice.store/v1/videos/task_xxx/remix \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: remix-of-task_xxx" \
  -d '{"prompt": "Same shot, at night"}'
remix.json
{
  "task_id": "task_yyy",
  "status": "queued",
  "remixed_from_video_id": "task_xxx"
}

Um remix é uma nova tarefa cobrada

Custa o mesmo que a original, segue o mesmo ciclo de vida e retorna o próprio task_id. Consulte o novo id — a original não é alterada.
  • 400 invalid_requestprompt é obrigatório em um remix.
  • 400 task_not_existO id do vídeo de origem é desconhecido ou pertence a outra conta.
  • 400 task_channel_disableO canal que produziu o vídeo original não está mais ativado.

Tabela completa de códigos de erro →

#Erros relacionados

  • 404 not_foundCaminho desconhecido, nome de modelo desconhecido ou um task_id expirado ou de outra conta.
  • 422 unprocessable_entityO provedor rejeitou valores de parâmetros que o gateway repassou (por exemplo, tamanho ou duração não suportados).
  • 401Bearer token inválido ou ausente. Não há error.code neste caminho — verifique o status.
  • 402 insufficient_user_quotaO saldo da carteira não cobre a estimativa pré-reservada.
  • 429Limitação por chave. Corpo vazio; aguarde o Retry-After. Um 429 que traz insufficient_user_quota indica, na verdade, o limite de gastos diário.
  • 503 model_not_foundModelo desconhecido, ou nenhum canal saudável o atende no momento.

Tabela completa de códigos de erro →

#Exemplo de requisição

# submit
curl https://www.aisplice.store/v1/videos \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "doubao-seedance-2.5", "prompt": "A drone shot of a lighthouse at dawn"}'

# poll every 5s
curl https://www.aisplice.store/v1/videos/$TASK_ID -H "Authorization: Bearer sk-YOUR_KEY"

# download when completed
curl -L https://www.aisplice.store/v1/videos/$TASK_ID/content -o out.mp4 -H "Authorization: Bearer sk-YOUR_KEY"

#Resposta

response.json
// POST — submit accepted
{"task_id": "task_xxx", "status": "queued"}

// GET /v1/videos/{task_id}
{
  "task_id": "task_xxx",
  "status": "in_progress",      // queued | in_progress | completed | failed
  "progress": "45%"
}

// terminal state
{
  "task_id": "task_xxx",
  "status": "completed",
  "metadata": {"url": "https://…"}
}

Ainda com problemas?

Envie para nós o ID da requisição ou a mensagem de erro e vamos investigar.