# API de Exportação de Clipes

> Exporte ou reexporte clipes existentes do Clipping com IA e Buscar Momentos com novos estilos de legenda e configurações de renderização.

## API de Exportação de Clipes

Use esta API quando você já criou uma tarefa de [Clipping com IA](https://wayin.ai/pt/api-docs/ai-clipping/) ou [Buscar Momentos](https://wayin.ai/pt/api-docs/find-moments/) e deseja renderizar clipes posteriormente, ou reexportá-los com diferentes estilos de legenda, proporção, gancho de IA ou outras configurações.

O `project_id` deve ser o ID da tarefa original retornado por:
- `POST /api/v2/clips`
- `POST /api/v2/clips/find-moments`

---

## Enviar Tarefa de Exportação

```
POST https://wayinvideo-api.wayin.ai/api/v2/clips/export
```

### Corpo da Requisição

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|-----------|------|-------------|--------|-----------|
| `project_id` | string | Sim | — | ID da tarefa original de Clipping com IA ou Buscar Momentos. |
| `clip_indices` | integer[] | Não | `null` | Índices dos clipes a exportar. Quando omitido, exporta todos os clipes. |
| `target_lang` | string | Não | `null` | Idioma de destino para legendas. Quando `null`, usa o idioma da tarefa original. |
| `resolution` | string | Não | `SD_480` | Resolução: `SD_480`, `HD_720`, `FHD_1080`, `QHD_2K`, `UHD_4K`. |
| `enable_caption` | boolean | Não | `false` | Adicionar legenda animada. Quando `true`, `caption_display` e `cc_style_tpl` têm efeito. |
| `caption_display` | string | Não | `original` | Modo de legenda: `both`, `original`, `translation`. Apenas quando `enable_caption` é `true`. |
| `cc_style_tpl` | string | Não | `temp-7` | ID do modelo de estilo de legenda. Apenas quando `enable_caption` é `true`. |
| `enable_ai_hook` | boolean | Não | `false` | Adicionar texto de gancho gerado por IA no início ou no fim de cada clipe. |
| `ai_hook_script_style` | string | Não | `serious` | Estilo do gancho: `serious`, `casual`, `informative`, `conversational`, `humorous`, `parody`, `inspirational`, `dramatic`, `empathetic`, `persuasive`, `neutral`, `excited`, `calm`. |
| `ai_hook_position` | string | Não | `beginning` | Posição: `beginning`, `end`. |
| `ai_hook_keywords` | string | Não | `null` | Palavras-chave opcionais para orientar o texto do gancho de IA. |
| `ai_hook_text_duration` | integer | Não | `null` | Duração da sobreposição de texto do gancho em milissegundos. |
| `enable_ai_reframe` | boolean | Não | `false` | Ativar Reencadramento com IA. Quando `true`, `ratio` é obrigatório. |
| `ratio` | string | Obrigatório quando `enable_ai_reframe` é `true` | — | Proporção: `RATIO_9_16`, `RATIO_1_1`, `RATIO_4_5`, `RATIO_16_9`. |

### Exemplo de Requisição

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/clips/export \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -d '{
    "project_id": "proj_abc123",
    "clip_indices": [0, 2],
    "resolution": "UHD_4K",
    "enable_caption": true,
    "caption_display": "both",
    "cc_style_tpl": "word-focus",
    "enable_ai_hook": true,
    "ai_hook_script_style": "serious",
    "ai_hook_position": "beginning",
    "enable_ai_reframe": true,
    "ratio": "RATIO_9_16"
  }'
```

### Resposta de Envio

```json
{"data": {"export_task_id": "export_task_xyz789", "name": "sample export task", "status": "CREATED"}}
```

| Campo | Tipo | Descrição |
|-------|------|-----------|
| `export_task_id` | string | Identificador único da tarefa de exportação. Use este valor para consultar o progresso. |
| `name` | string | Nome da tarefa de exportação |
| `status` | string | `CREATED`, `QUEUED`, `ONGOING`, `SUCCEEDED`, `FAILED` |

---

## Obter Resultados de Exportação

```
GET https://wayinvideo-api.wayin.ai/api/v2/clips/export/{taskId}
```

```bash
curl -X GET https://wayinvideo-api.wayin.ai/api/v2/clips/export/export_task_xyz789 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2"
```

```json
{
  "data": {
    "export_task_id": "export_task_xyz789", "name": "sample export task",
    "status": "SUCCEEDED", "expire_at": 1775831883112, "cost_usage": 48.0,
    "clips": [
      {"idx": 0, "title": "sample title", "begin_ms": 15000, "end_ms": 75000,
       "thumbnail": "https://cdn.example.com/thumb/clip_001.jpg",
       "tags": ["insight", "analysis"], "desc": "sample description",
       "score": 81, "export_link": "https://cdn.example.com/export/clip_001.mp4"}
    ]
  }
}
```

### Campos da Resposta

| Campo | Tipo | Descrição |
|-------|------|-----------|
| `export_task_id` | string | Identificador único da tarefa de exportação |
| `name` | string | Nome da tarefa de exportação |
| `status` | string | `CREATED`, `QUEUED`, `ONGOING`, `SUCCEEDED`, `FAILED` |
| `error_message` | string | Motivo do erro (apenas quando `FAILED`) |
| `expire_at` | integer | Timestamp de expiração em milissegundos. `-1` significa que o resultado não expira enquanto uma assinatura paga estiver ativa. Depois que a assinatura paga termina, o resultado é mantido por mais um mês e então expira. |
| `cost_usage` | number | API Units consumidas |
| `clips` | array | Lista de clipes exportados |
