# API Clips Export

> Exportez ou ré-exportez des clips existants depuis AI Clipping et Find Moments avec de nouveaux styles de sous-titres et paramètres de rendu.

## API Clips Export

Utilisez cette API lorsque vous avez déjà créé une tâche [AI Clipping](https://wayin.ai/fr/api-docs/ai-clipping/) ou [Find Moments](https://wayin.ai/fr/api-docs/find-moments/) et souhaitez rendre des clips ultérieurement, ou les ré-exporter avec un style de sous-titres différent, un format d'image, un AI Hook ou d'autres paramètres d'export.

Le `project_id` doit être l'ID de tâche original retourné par :

- `POST /api/v2/clips`
- `POST /api/v2/clips/find-moments`

---

## Soumettre une Tâche d'Export

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

### Corps de la Requête

| Paramètre | Type | Obligatoire | Défaut | Description |
|-----------|------|-------------|--------|-------------|
| `project_id` | string | Oui | — | L'ID de tâche AI Clipping ou Find Moments original. |
| `clip_indices` | integer[] | Non | `null` | Indices des clips à exporter. Si omis, le système exporte tous les clips du projet. |
| `target_lang` | string | Non | `null` | Langue cible pour le contenu de sortie, y compris les sous-titres (voir [Langues prises en charge](https://wayin.ai/fr/api-docs/supported-languages/)). Si `null`, la langue de sortie correspond à la langue de la tâche source. |
| `resolution` | string | Non | `SD_480` | Résolution de sortie : `SD_480`, `HD_720`, `FHD_1080`, `QHD_2K`, `UHD_4K`. |
| `enable_caption` | boolean | Non | `false` | Ajouter des sous-titres animés lors du rendu. Si `true`, `caption_display` et `cc_style_tpl` prennent effet ; si `false`, l'export n'a pas de sous-titres animés. |
| `caption_display` | string | Non | `original` | Mode de sous-titres : `both`, `original`, `translation`. Utilisé uniquement quand `enable_caption` est `true`. |
| `cc_style_tpl` | string | Non | `temp-7` | ID du modèle de style de sous-titres (voir [Styles de sous-titres](https://wayin.ai/fr/api-docs/subtitles-style/)). Utilisé uniquement quand `enable_caption` est `true`. |
| `enable_ai_hook` | boolean | Non | `false` | Ajouter un texte d'accroche généré automatiquement au début ou à la fin de chaque clip exporté. Si `true`, `ai_hook_script_style` et `ai_hook_position` prennent effet ; si `false`, aucun AI Hook n'est ajouté. |
| `ai_hook_script_style` | string | Non | `serious` | Style du texte d'accroche généré. Valeurs autorisées : `serious`, `casual`, `informative`, `conversational`, `humorous`, `parody`, `inspirational`, `dramatic`, `empathetic`, `persuasive`, `neutral`, `excited`, `calm`. Utilisé uniquement quand `enable_ai_hook` est `true`. |
| `ai_hook_position` | string | Non | `beginning` | Position du texte d'accroche généré. Valeurs autorisées : `beginning`, `end`. Utilisé uniquement quand `enable_ai_hook` est `true`. |
| `ai_hook_keywords` | string | Non | `null` | Mots-clés optionnels pour orienter le texte d'accroche IA généré. Utilisé uniquement quand `enable_ai_hook` est `true`. |
| `ai_hook_text_duration` | integer | Non | `null` | Durée de l'overlay de texte AI Hook en millisecondes. Utilisé uniquement quand `enable_ai_hook` est `true`. |
| `enable_ai_reframe` | boolean | Non | `false` | Activer l'AI Reframe. Si `true`, `ratio` est obligatoire ; si `false`, le clip est exporté avec son format d'origine inchangé. |
| `ratio` | string | Oui si `enable_ai_reframe` est `true` | — | Format d'image : `RATIO_9_16`, `RATIO_1_1`, `RATIO_4_5`, `RATIO_16_9`. Obligatoire quand `enable_ai_reframe` est `true`. |

### Exemple de Requête

```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"
  }'
```

### Réponse de Soumission

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

| Champ | Type | Description |
|-------|------|-------------|
| `export_task_id` | string | Identifiant unique de la tâche d'export. Utilisez cette valeur pour interroger la progression de l'export. |
| `name` | string | Nom de la tâche d'export |
| `status` | string | `CREATED`, `QUEUED`, `ONGOING`, `SUCCEEDED`, `FAILED` |

---

## Récupérer les Résultats d'Export

Interrogez la tâche d'export jusqu'à ce que `status` soit `SUCCEEDED`.

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

### Paramètres de Chemin

| Paramètre | Type | Obligatoire | Description |
|-----------|------|-------------|-------------|
| `taskId` | string | Oui | L'`export_task_id` retourné par l'endpoint de soumission d'export |

### Exemple de Requête

```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"
```

### Exemple de Réponse

```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"
      }
    ]
  }
}
```

### Champs de la Réponse

| Champ | Type | Description |
|-------|------|-------------|
| `export_task_id` | string | Identifiant unique de la tâche d'export |
| `name` | string | Nom de la tâche d'export |
| `status` | string | `CREATED`, `QUEUED`, `ONGOING`, `SUCCEEDED`, `FAILED` |
| `error_message` | string | Raison de l'erreur (présent uniquement quand `status` est `FAILED`) |
| `expire_at` | integer | Horodatage d'expiration en millisecondes (epoch). Après cette date, la tâche expire et les résultats ne peuvent plus être récupérés via l'endpoint des résultats d'export. `-1` signifie que le résultat n'expire pas tant qu'un abonnement payant est actif. À la fin de l'abonnement payant, le résultat est conservé un mois de plus, puis il expire. |
| `cost_usage` | number | Crédits API consommés pour cette requête d'export |
| `clips` | array | Liste des objets clips exportés. Quand `status` est `ONGOING`, peut contenir des résultats d'export partiels ; quand `status` est `SUCCEEDED`, contient tous les clips exportés. |

Les objets `clips` retournés par l'endpoint des résultats d'export utilisent la même structure que les objets clip dans l'endpoint des résultats principal, y compris `export_link` pour chaque clip rendu.
