> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# APIs de geração de vídeo

> Escolha as rotas de vídeo da CometAPI para fluxos de trabalho de Seedance, HappyHorse, Sora 2, Veo 3, Wan, xAI, Vidu, Omni, Kling e Runway.

Use a documentação de modelos de vídeo da CometAPI escolhendo o fluxo de trabalho do provedor que corresponde ao seu tipo de tarefa. A maioria dos endpoints de vídeo cria tarefas assíncronas, então salve o ID da tarefa e use polling para recuperar os resultados. Adicione callbacks apenas quando a página específica do modelo documentar suporte a callback.

## Escolha uma API de vídeo

<CardGroup cols={2}>
  <Card title="Criar um vídeo Seedance" icon="sparkles" href="/api/video/seedance/create">
    Crie tarefas de vídeo Seedance.
  </Card>

  <Card title="Criar um vídeo HappyHorse" icon="sparkles" href="/api/video/happyhorse/create">
    Crie tarefas de texto para vídeo do HappyHorse.
  </Card>

  <Card title="Criar um vídeo Sora 2" icon="film" href="/api/video/sora-2/create">
    Crie tarefas de vídeo Sora 2.
  </Card>

  <Card title="Recuperar um vídeo Sora 2" icon="refresh" href="/api/video/sora-2/retrieve">
    Consulte tarefas de vídeo do Sora.
  </Card>

  <Card title="Criar um vídeo Veo 3" icon="film" href="/api/video/veo3/create">
    Crie tarefas de vídeo Veo.
  </Card>

  <Card title="Criar um vídeo Wan" icon="sparkles" href="/api/video/wan/create">
    Crie tarefas de texto para vídeo do Wan.
  </Card>

  <Card title="Criar um vídeo xAI" icon="film" href="/api/video/xai/video-generation">
    Gere tarefas de vídeo xAI.
  </Card>

  <Card title="Criar um vídeo Vidu" icon="sparkles" href="/api/video/vidu/create">
    Crie tarefas de texto para vídeo do Vidu.
  </Card>

  <Card title="Criar um vídeo Omni (Beta)" icon="sparkles" href="/api/video/omni/create">
    Crie tarefas beta de vídeo Omni.
  </Card>

  <Card title="Criar uma tarefa de texto para vídeo do Kling" icon="film" href="/api/video/kling/text-to-video">
    Gere vídeos Kling a partir de prompts de texto.
  </Card>

  <Card title="Criar uma tarefa de imagem para vídeo do Runway" icon="film" href="/api/video/runway/official-format/runway-images-raw-video">
    Gere vídeos Runway a partir de imagens.
  </Card>
</CardGroup>

## Criar e consultar uma tarefa de vídeo

Use um model ID com capacidade de vídeo da [página Models](/pt/overview/models) ou do [diretório de modelos](https://www.cometapi.com/models/). Os exemplos abaixo criam uma tarefa de vídeo com `POST /v1/videos` e, em seguida, consultam o task ID retornado até que a tarefa atinja um estado terminal.

<Note>
  Estes exemplos usam o placeholder `your-video-model-id`. Substitua-o por um model ID de vídeo disponível na [página Models](/pt/overview/models) ou no [diretório de modelos](https://www.cometapi.com/models/) antes de executar a requisição.
</Note>

<Tip>
  Abra [Create a Seedance video](/api/video/seedance/create) e [Retrieve a Seedance video](/api/video/seedance/query) para usar os playgrounds da API e os schemas dos endpoints.
</Tip>

<CodeGroup>
  ```python Python theme={null}
  import os
  import time
  import requests

  headers = {"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]}

  create_response = requests.post(
      "https://api.cometapi.com/v1/videos",
      headers=headers,
      data={
          "model": "your-video-model-id",
          "prompt": "A calm camera move across a desk with a paper airplane",
      },
      timeout=30,
  )
  create_response.raise_for_status()
  task = create_response.json()
  task_id = task["id"]

  terminal_statuses = {"completed", "failed", "error"}

  while True:
      poll_response = requests.get(
          f"https://api.cometapi.com/v1/videos/{task_id}",
          headers=headers,
          timeout=30,
      )
      poll_response.raise_for_status()
      result = poll_response.json()
      print(result["status"], result.get("progress"))

      if result["status"] in terminal_statuses:
          print(result.get("video_url"))
          break

      time.sleep(10)
  ```

  ```javascript Node.js theme={null}
  const form = new FormData();
  form.append("model", "your-video-model-id");
  form.append("prompt", "A calm camera move across a desk with a paper airplane");

  const createResponse = await fetch("https://api.cometapi.com/v1/videos", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
    },
    body: form,
  });

  if (!createResponse.ok) {
    throw new Error(await createResponse.text());
  }

  const task = await createResponse.json();
  const terminalStatuses = new Set(["completed", "failed", "error"]);

  while (true) {
    const pollResponse = await fetch(
      `https://api.cometapi.com/v1/videos/${task.id}`,
      {
        headers: {
          Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
        },
      },
    );

    if (!pollResponse.ok) {
      throw new Error(await pollResponse.text());
    }

    const result = await pollResponse.json();
    console.log(result.status, result.progress);

    if (terminalStatuses.has(result.status)) {
      console.log(result.video_url);
      break;
    }

    await new Promise((resolve) => setTimeout(resolve, 10_000));
  }
  ```

  ```bash cURL theme={null}
  curl https://api.cometapi.com/v1/videos \
    -H "Authorization: Bearer $COMETAPI_KEY" \
    -F "model=your-video-model-id" \
    -F "prompt=A calm camera move across a desk with a paper airplane"

  curl https://api.cometapi.com/v1/videos/task_example \
    -H "Authorization: Bearer $COMETAPI_KEY"
  ```
</CodeGroup>

## Exemplos de resposta

Uma resposta de criação bem-sucedida pode ser assim. Armazene o task ID antes de consultar:

```json theme={null}
{
  "id": "task_example",
  "task_id": "task_example",
  "object": "video",
  "model": "your-video-model-id",
  "status": "queued",
  "progress": 0,
  "created_at": 1779872000
}
```

Uma resposta de consulta bem-sucedida pode ser assim. Respostas concluídas podem incluir `video_url`; alguns formatos de provider usam campos de resultado específicos do modelo ou a rota de conteúdo de vídeo quando essa rota está documentada:

```json theme={null}
{
  "id": "task_example",
  "object": "video",
  "model": "your-video-model-id",
  "status": "completed",
  "progress": 100,
  "completed_at": 1779872300,
  "video_url": "https://example.com/generated-video.mp4"
}
```

## Registros de modelo de exemplo

<Info>
  Esta resposta de exemplo do catálogo de modelos mostra o envelope de `/api/models` e o formato de um registro de modelo de vídeo. Não é uma lista completa de modelos.
</Info>

```bash cURL theme={null}
curl https://api.cometapi.com/api/models
```

```json theme={null}
{
  "success": true,
  "page": 1,
  "page_size": 20,
  "total": 302,
  "data": [
    {
      "created": 1767529753,
      "id": "your-video-model-id",
      "code": "your-video-model-id",
      "provider": "ExampleProvider",
      "provider_code": "example",
      "name": "Example video model",
      "model_type": "video",
      "features": [
        "text-to-video"
      ],
      "endpoints": "{\n  \"seedance\": {\n    \"path\": \"/v1/videos\",\n    \"method\": \"POST\"\n  }\n}",
      "pricing": {
        "currency": "USD / M Tokens",
        "input": null,
        "output": null,
        "per_request": null,
        "per_second": 0.024
      }
    }
  ]
}
```

## Erros comuns

<AccordionGroup>
  <Accordion title="ID da tarefa ausente">
    Armazene o ID da resposta de criação antes de retornar do seu manipulador de job.
  </Accordion>

  <Accordion title="Polling rápido demais">
    Adicione atraso e backoff entre as verificações de status.
  </Accordion>

  <Accordion title="Duração ou tamanho não suportados">
    Use os campos de duração e resolução documentados para o endpoint de vídeo selecionado.
  </Accordion>

  <Accordion title="video_url ausente">
    Trate `video_url` como opcional e use como fallback campos de resultado específicos do modelo ou a rota de conteúdo, quando disponível.
  </Accordion>

  <Accordion title="Callback não recebido">
    Use polling como fonte da verdade e verifique se a sua URL de callback aceita requisições POST.
  </Accordion>
</AccordionGroup>

## Códigos de erro e estratégia de retry

<AccordionGroup>
  <Accordion title="400">
    Não tente novamente até que os campos de prompt, arquivos, duração ou tamanho sejam corrigidos.
  </Accordion>

  <Accordion title="401">
    Não tente novamente até que a chave de API esteja presente e seja válida.
  </Accordion>

  <Accordion title="404">
    Verifique o ID da tarefa, a URL base, o path e o model ID antes de tentar novamente.
  </Accordion>

  <Accordion title="413">
    Reduza o tamanho do upload antes de tentar novamente.
  </Accordion>

  <Accordion title="429">
    Tente novamente com backoff exponencial e reduza a concorrência de criação ou polling.
  </Accordion>

  <Accordion title="500 or 503">
    Tente novamente a criação da tarefa com backoff; continue fazendo polling das tarefas existentes, a menos que a tarefa atinja um erro terminal.
  </Accordion>
</AccordionGroup>

<Tip>
  Para padrões de implementação, veja [Códigos de erro e estratégia de retry](/pt/guides/error-codes-and-retry-strategy), [Limites de taxa e concorrência](/pt/guides/rate-limits-and-concurrency) e [Webhook e polling para geração de vídeo](/pt/guides/webhook-and-polling-for-video-generation).
</Tip>

## Preços e diretório de modelos

<CardGroup cols={3}>
  <Card title="Página de modelos" icon="list" href="/overview/models">
    Leia como a CometAPI expõe model IDs na documentação.
  </Card>

  <Card title="Diretório de modelos" icon="puzzle-piece" href="https://www.cometapi.com/models/">
    Navegue pela disponibilidade e capacidades dos modelos.
  </Card>

  <Card title="Preços" icon="tag" href="https://www.cometapi.com/pricing/">
    Verifique os preços antes de chamar um modelo.
  </Card>
</CardGroup>
