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

# API Vidéo - Récupération

> Récupérer le statut et l'URL d'une vidéo en cours de génération

# API Vidéo - Récupération

Récupère le statut d'une vidéo en cours de génération et déclenche automatiquement les étapes suivantes (génération des clips, rendu final). Ce endpoint est **idempotent** et peut être appelé régulièrement pour suivre l'avancement.

<ParamField path="GET /api/video-editor/generate/video/{id}" />

## Authentification

Toutes les requêtes doivent inclure l'en-tête :

* `x-api-key: VOTRE_API_KEY`

## En-têtes

<ParamField header="x-api-key" type="string" required>
  Votre clé API IACrea
</ParamField>

## Paramètres d'URL

<ParamField path="id" type="string" required>
  Identifiant unique de la vidéo (retourné par `POST
      /api/video-editor/generate/video`)
</ParamField>

## Réponses

Ce endpoint renvoie différents statuts selon l'avancement de la génération :

### 200 — `status: "GENERATING_VIDEO"`

Les clips vidéo (séquences) sont en cours de génération.

<ResponseField name="status" type="string">
  Statut : `"GENERATING_VIDEO"`
</ResponseField>

<ResponseField name="creditsTotal" type="number">
  Nombre de crédits vidéo restants
</ResponseField>

<ResponseField name="creditsUsed" type="number">
  Nombre de crédits utilisés
</ResponseField>

<ResponseField name="generatedContent" type="array">
  Liste des contenus générés avec leur statut actuel (`"pending" | "success" |
      "error"`)
</ResponseField>

### 200 — `status: "START_RENDERING_VIDEO"`

Toutes les séquences sont prêtes et le rendu final de la vidéo démarre.

<ResponseField name="status" type="string">
  Statut : `"START_RENDERING_VIDEO"`
</ResponseField>

<ResponseField name="progress" type="number">
  Progression du rendu (0 au démarrage)
</ResponseField>

<ResponseField name="creditsTotal" type="number">
  Nombre de crédits vidéo restants
</ResponseField>

<ResponseField name="creditsUsed" type="number">
  Nombre de crédits utilisés
</ResponseField>

<ResponseField name="generatedContent" type="array">
  Liste des contenus générés
</ResponseField>

### 200 — `status: "RENDERING_VIDEO"`

Le rendu final de la vidéo est en cours.

<ResponseField name="status" type="string">
  Statut : `"RENDERING_VIDEO"`
</ResponseField>

<ResponseField name="progress" type="number">
  Progression du rendu (nombre entre 0 et 1, ou 0-100 selon l'implémentation)
</ResponseField>

<ResponseField name="creditsTotal" type="number">
  Nombre de crédits vidéo restants
</ResponseField>

<ResponseField name="creditsUsed" type="number">
  Nombre de crédits utilisés
</ResponseField>

### 200 — `status: "DONE"`

La vidéo finale est prête et disponible.

<ResponseField name="status" type="string">
  Statut : `"DONE"`
</ResponseField>

<ResponseField name="url" type="string">
  URL de la vidéo finale générée
</ResponseField>

<ResponseField name="id" type="string">
  Identifiant de la vidéo
</ResponseField>

<ResponseField name="generatedContent" type="array">
  Liste des contenus générés avec leur statut final
</ResponseField>

<ResponseField name="creditsTotal" type="number">
  Nombre de crédits vidéo restants
</ResponseField>

<ResponseField name="creditsUsed" type="number">
  Nombre de crédits utilisés
</ResponseField>

### 200 — `status: "PENDING"`

État transitoire. Peut être renvoyé lorsqu'une séquence est en erreur et qu'une régénération est relancée automatiquement côté serveur.

<ResponseField name="status" type="string">
  Statut : `"PENDING"`
</ResponseField>

<ResponseField name="error" type="string">
  Message d'erreur optionnel (ex : `"Re-generating video in error"`)
</ResponseField>

### 401 — Non autorisé

Renvoyé si `x-api-key` est manquant ou invalide.

### 404 — Non trouvé

Renvoyé si l'`id` de la vidéo n'existe pas.

### 500 — Erreur serveur

Erreur interne du serveur.

## Exemple de requête

```bash theme={null}
curl --request GET \
  --url 'https://iacrea.com/api/video-editor/generate/video/550e8400-e29b-41d4-a716-446655440000' \
  --header 'x-api-key: VOTRE_API_KEY'
```

## Exemples de réponses

### Génération en cours

```json theme={null}
{
  "status": "GENERATING_VIDEO",
  "creditsTotal": 48,
  "creditsUsed": 2,
  "generatedContent": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "url": "https://exemple.com/image1.jpg",
      "effect": "CAMERA_PUSH_IN",
      "format": "landscape",
      "status": "success"
    },
    {
      "id": "660e8400-e29b-41d4-a716-446655440002",
      "url": "https://exemple.com/image2.jpg",
      "effect": "CAMERA_PUSH_OUT",
      "format": "landscape",
      "status": "pending"
    }
  ]
}
```

### Rendu en cours

```json theme={null}
{
  "status": "RENDERING_VIDEO",
  "progress": 0.65,
  "creditsTotal": 48,
  "creditsUsed": 2
}
```

### Vidéo terminée

```json theme={null}
{
  "status": "DONE",
  "url": "https://storage.iacrea.com/videos/550e8400-e29b-41d4-a716-446655440000.mp4",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "generatedContent": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "url": "https://exemple.com/image1.jpg",
      "effect": "CAMERA_PUSH_IN",
      "format": "landscape",
      "status": "success"
    },
    {
      "id": "660e8400-e29b-41d4-a716-446655440002",
      "url": "https://exemple.com/image2.jpg",
      "effect": "CAMERA_PUSH_OUT",
      "format": "landscape",
      "status": "success"
    }
  ],
  "creditsTotal": 48,
  "creditsUsed": 2
}
```

## Recommandations d'intégration

* **Polling** : Appelez ce endpoint toutes les **2-5 secondes** jusqu'à obtenir le statut `"DONE"` ou `"ERROR"`
* **Timeout** : Prévoyez un timeout côté client (ex : 10-20 minutes) selon la durée de rendu
* **Résilience** : Si vous recevez `"PENDING"` après avoir déjà vu `"GENERATING_VIDEO"`, continuez le polling : le serveur peut relancer automatiquement des séquences en erreur
* **Webhook** : Si vous avez fourni un `webhookUrl` lors de la création, vous recevrez également une notification lorsque la vidéo est prête
