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

# Obtenir les détails du projet

> Récupérer les détails publics du projet, l'historique des versions traduites et l'historique de synchronisation labiale

# Obtenir les détails du projet

Récupérer une vue publique normalisée d'un projet. Utilisez ce point de terminaison lorsque vous avez besoin de l'historique des versions traduites, de l'historique de synchronisation labiale, de l'état des sous-titres dynamiques ou de l'état de publication.

Pour un interrogatoire fréquent, continuez à utiliser [Obtenir le statut de traduction](/docs/fr/api-reference/translation-status). Ce point de terminaison est plus riche et renvoie intentionnellement plus de données.

## Requête

### En-têtes

<ParamField header="x-api-key" type="string" required>
  Votre clé API VoiceCheap. Obtenez-en une sur [app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api).
</ParamField>

### Paramètres de chemin

<ParamField path="projectId" type="string" required>
  L'identifiant unique du projet renvoyé par [Créer un projet](/docs/fr/api-reference/create-project) ou [Démarrer la traduction](/docs/fr/api-reference/translate).
</ParamField>

## Réponse

<ResponseField name="projectId" type="string" required>
  L'identifiant unique du projet.
</ResponseField>

<ResponseField name="projectName" type="string" required>
  Le nom du projet.
</ResponseField>

<ResponseField name="status" type="string" required>
  Statut public du projet : `processing`, `success` ou `failed`.
</ResponseField>

<ResponseField name="workflow" type="string" required>
  Flux de travail API : `translation` ou `transcription`. Les flux de travail de transcription atteignent le succès lorsque la transcription source est terminée.
</ResponseField>

<ResponseField name="originalVideoUrl" type="string" required>
  URL vers le fichier vidéo ou audio original téléchargé.
</ResponseField>

<ResponseField name="originalLanguage" type="string" required>
  La langue originale détectée ou spécifiée.
</ResponseField>

<ResponseField name="targetLanguages" type="string[]" required>
  Langues cibles associées au projet.
</ResponseField>

<ResponseField name="duration" type="number" required>
  Durée du contenu en secondes.
</ResponseField>

<ResponseField name="createdAt" type="number" required>
  Horodatage Unix de création du projet.
</ResponseField>

<ResponseField name="progress" type="object" required>
  Progression actuelle au niveau du projet.

  <Expandable title="propriétés de progression">
    <ResponseField name="progress.step" type="string">
      Étape actuelle de création ou de transcription du projet.
    </ResponseField>

    <ResponseField name="progress.transcriptionProgress" type="number">
      Pourcentage approximatif de progression de la création/transcription du projet.
    </ResponseField>

    <ResponseField name="progress.transcriptionStatus" type="string" required>
      Statut de la transcription source : `processing`, `success` ou `failed`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations" type="array" required>
  Historique des versions traduites, trié avec la version la plus récente en premier.

  <Expandable title="propriétés de traduction">
    <ResponseField name="translations[].workId" type="string">
      Identifiant du travail de traduction.
    </ResponseField>

    <ResponseField name="translations[].translatedVersionId" type="string">
      Identifiant de la version traduite.
    </ResponseField>

    <ResponseField name="translations[].targetLanguage" type="string">
      Langue cible pour cette version.
    </ResponseField>

    <ResponseField name="translations[].status" type="string">
      Statut de la version de traduction : `in-progress`, `completed`, `not-started` ou `failed`.
    </ResponseField>

    <ResponseField name="translations[].currentStep" type="string">
      Étape actuelle de doublage pour cette version.
    </ResponseField>

    <ResponseField name="translations[].progress" type="number">
      Pourcentage approximatif de progression du doublage.
    </ResponseField>

    <ResponseField name="translations[].createdAt" type="number">
      Horodatage de création de cette version traduite.
    </ResponseField>

    <ResponseField name="translations[].completedAt" type="number">
      Horodatage d'achèvement lorsqu'il est disponible.
    </ResponseField>

    <ResponseField name="translations[].failedAt" type="number">
      Horodatage d'échec lorsqu'il est disponible.
    </ResponseField>

    <ResponseField name="translations[].timedOutAt" type="number">
      Horodatage de délai d'attente lorsqu'il est disponible.
    </ResponseField>

    <ResponseField name="translations[].translatedVideoUrl" type="string">
      URL de la vidéo traduite.
    </ResponseField>

    <ResponseField name="translations[].translatedAudioUrl" type="string">
      URL de l'audio traduit.
    </ResponseField>

    <ResponseField name="translations[].settings" type="object">
      Paramètres publics utilisés pour la version traduite, tels que les sous-titres, SmartSync, l'audio d’arrière-plan et le mode de qualité.
    </ResponseField>

    <ResponseField name="translations[].error" type="object">
      Code d'erreur et message en cas d'échec de la version traduite.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].lipSync" type="object">
  Historique de la synchronisation labiale pour la version traduite, présent uniquement lorsque la synchronisation labiale a été demandée.

  <Expandable title="Propriétés de synchronisation labiale">
    <ResponseField name="translations[].lipSync.latest" type="object">
      Dernière tentative de synchronisation labiale.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history" type="array">
      Toutes les tentatives de synchronisation labiale pour cette version traduite, par ordre de création.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].jobId" type="string">
      Identifiant de la tâche de synchronisation labiale.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].status" type="string">
      Statut de la synchronisation labiale : `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `REJECTED` ou `CANCELED`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].videoUrl" type="string">
      URL de la vidéo avec synchronisation labiale une fois terminée.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].type" type="string">
      Mode de synchronisation labiale : `standard`, `pro` ou `studio`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].activeSpeakerDetectionEnabled" type="boolean">
      Indique si la détection du locuteur actif était activée pour cette tentative.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].dynamicSubtitles" type="object">
  État des sous-titres dynamiques lorsqu'ils sont disponibles.
</ResponseField>

<ResponseField name="translations[].publicationAttempts" type="array">
  État de la tentative de publication publique lorsqu'il est disponible.
</ResponseField>

<ResponseField name="translations[].publishedVideos" type="array">
  Références de la vidéo publiée publiquement lorsqu'elles sont disponibles.
</ResponseField>

## Exemple

```bash cURL theme={null}
curl -X GET "https://api.voicecheap.ai/v1/projects/abc123-def456-ghi789" \
  -H "x-api-key: vc_your-api-key"
```

```json Response theme={null}
{
  "projectId": "abc123-def456-ghi789",
  "projectName": "Launch Demo",
  "status": "success",
  "workflow": "translation",
  "originalVideoUrl": "https://storage.example.com/input.mp4",
  "originalLanguage": "en",
  "targetLanguages": ["french"],
  "duration": 120,
  "createdAt": 1791280000000,
  "progress": {
    "step": "done",
    "transcriptionProgress": 100,
    "transcriptionStatus": "success"
  },
  "translations": [
    {
      "workId": "work_123",
      "translatedVersionId": "version_456",
      "targetLanguage": "french",
      "status": "completed",
      "currentStep": "done",
      "progress": 100,
      "createdAt": 1791280200000,
      "completedAt": 1791280800000,
      "translatedVideoUrl": "https://storage.example.com/translated.mp4",
      "translatedAudioUrl": "https://storage.example.com/translated.mp3",
      "settings": {
        "voiceCloning": true,
        "uploadType": "video",
        "keepBackgroundMusic": true,
        "keepOriginalVoice": false,
        "originalVoiceVolume": 30,
        "subtitles": {
          "isEnable": true,
          "source": "translated"
        },
        "smartSync": true,
        "voiceIsolatorOption": "studio",
        "translationQualityMode": "max"
      },
      "lipSync": {
        "latest": {
          "jobId": "lip_789",
          "status": "COMPLETED",
          "videoUrl": "https://storage.example.com/lipsync.mp4",
          "errorMessage": null,
          "type": "pro",
          "createdAt": "2026-06-08T10:00:00.000Z",
          "completedAt": "2026-06-08T10:20:00.000Z",
          "activeSpeakerDetectionEnabled": true
        },
        "history": [
          {
            "jobId": "lip_789",
            "status": "COMPLETED",
            "videoUrl": "https://storage.example.com/lipsync.mp4",
            "errorMessage": null,
            "type": "pro",
            "createdAt": "2026-06-08T10:00:00.000Z",
            "completedAt": "2026-06-08T10:20:00.000Z",
            "activeSpeakerDetectionEnabled": true
          }
        ]
      }
    }
  ]
}
```

## Erreurs

| Statut | Code                  | Description                                        |
| ------ | --------------------- | -------------------------------------------------- |
| 401    | `MISSING_API_KEY`     | La clé API est requise                             |
| 401    | `INVALID_API_KEY`     | La clé API fournie est invalide                    |
| 403    | `FORBIDDEN`           | Vous n'avez pas l'autorisation d'accéder au projet |
| 404    | `PROJECT_NOT_FOUND`   | Le projet n'existe pas                             |
| 429    | `RATE_LIMIT_EXCEEDED` | Trop de requêtes                                   |
| 500    | `INTERNAL_ERROR`      | Erreur serveur inattendue                          |
