> ## 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.

# Projectdetails ophalen

> Haal openbare projectdetails, vertaalde versiegeschiedenis en lipsynchronisatiegeschiedenis op

# Projectdetails ophalen

Haal een genormaliseerde openbare weergave van een project op. Gebruik dit eindpunt wanneer u vertaalde versiegeschiedenis, lipsynchronisatiegeschiedenis, de status van dynamische ondertitels of de publicatiestatus nodig heeft.

Blijf voor frequente polling [Vertaalstatus ophalen](/docs/nl/api-reference/translation-status) gebruiken. Dit eindpunt is rijker en retourneert opzettelijk meer gegevens.

## Verzoek

### Headers

<ParamField header="x-api-key" type="string" required>
  Uw VoiceCheap API-sleutel. Haal er een op via [app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api).
</ParamField>

### Padparameters

<ParamField path="projectId" type="string" required>
  De unieke identificatiecode van het project geretourneerd door [Project aanmaken](/docs/nl/api-reference/create-project) of [Vertaling starten](/docs/nl/api-reference/translate).
</ParamField>

## Antwoord

<ResponseField name="projectId" type="string" required>
  De unieke identificatiecode van het project.
</ResponseField>

<ResponseField name="projectName" type="string" required>
  De projectnaam.
</ResponseField>

<ResponseField name="status" type="string" required>
  Openbare projectstatus: `processing`, `success` of `failed`.
</ResponseField>

<ResponseField name="workflow" type="string" required>
  API-workflow: `translation` of `transcription`. Transcriptieworkflows bereiken succes wanneer de brontranscriptie is voltooid.
</ResponseField>

<ResponseField name="originalVideoUrl" type="string" required>
  URL naar het oorspronkelijk geüploade video- of audiobestand.
</ResponseField>

<ResponseField name="originalLanguage" type="string" required>
  De gedetecteerde of opgegeven brontaal.
</ResponseField>

<ResponseField name="targetLanguages" type="string[]" required>
  Doeltalen gekoppeld aan het project.
</ResponseField>

<ResponseField name="duration" type="number" required>
  Duur van de inhoud in seconden.
</ResponseField>

<ResponseField name="createdAt" type="number" required>
  Unix-tijdstempel waarop het project is aangemaakt.
</ResponseField>

<ResponseField name="progress" type="object" required>
  Huidige voortgang op projectniveau.

  <Expandable title="voortgangseigenschappen">
    <ResponseField name="progress.step" type="string">
      Huidige stap voor het aanmaken of transcriberen van het project.
    </ResponseField>

    <ResponseField name="progress.transcriptionProgress" type="number">
      Geschat voortgangspercentage van het aanmaken/transcriberen van het project.
    </ResponseField>

    <ResponseField name="progress.transcriptionStatus" type="string" required>
      Status van brontranscriptie: `processing`, `success` of `failed`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations" type="array" required>
  Vertaalde versiegeschiedenis, gesorteerd met de nieuwste versie eerst.

  <Expandable title="vertaaleigenschappen">
    <ResponseField name="translations[].workId" type="string">
      Identificatiecode voor vertaalwerk.
    </ResponseField>

    <ResponseField name="translations[].translatedVersionId" type="string">
      Identificatiecode voor vertaalde versie.
    </ResponseField>

    <ResponseField name="translations[].targetLanguage" type="string">
      Doeltaal voor deze versie.
    </ResponseField>

    <ResponseField name="translations[].status" type="string">
      Status van vertaalversie: `in-progress`, `completed`, `not-started` of `failed`.
    </ResponseField>

    <ResponseField name="translations[].currentStep" type="string">
      Huidige stap voor nasynchronisatie voor deze versie.
    </ResponseField>

    <ResponseField name="translations[].progress" type="number">
      Geschat voortgangspercentage van nasynchronisatie.
    </ResponseField>

    <ResponseField name="translations[].createdAt" type="number">
      Tijdstempel waarop deze vertaalde versie is aangemaakt.
    </ResponseField>

    <ResponseField name="translations[].completedAt" type="number">
      Tijdstempel van voltooiing indien beschikbaar.
    </ResponseField>

    <ResponseField name="translations[].failedAt" type="number">
      Tijdstempel van mislukking indien beschikbaar.
    </ResponseField>

    <ResponseField name="translations[].timedOutAt" type="number">
      Tijdstempel van time-out indien beschikbaar.
    </ResponseField>

    <ResponseField name="translations[].translatedVideoUrl" type="string">
      URL van de vertaalde video.
    </ResponseField>

    <ResponseField name="translations[].translatedAudioUrl" type="string">
      URL van vertaalde audio.
    </ResponseField>

    <ResponseField name="translations[].settings" type="object">
      Openbare instellingen gebruikt voor de vertaalde versie, zoals ondertitels, SmartSync, achtergrondaudio en kwaliteitsmodus.
    </ResponseField>

    <ResponseField name="translations[].error" type="object">
      Foutcode en bericht wanneer de vertaalde versie is mislukt.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].lipSync" type="object">
  Geschiedenis van lipsynchronisatie voor de vertaalde versie, alleen aanwezig wanneer lipsynchronisatie is aangevraagd.

  <Expandable title="lipSync-eigenschappen">
    <ResponseField name="translations[].lipSync.latest" type="object">
      Laatste poging tot lipsynchronisatie.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history" type="array">
      Alle pogingen tot lipsynchronisatie voor deze vertaalde versie, in volgorde van creatie.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].jobId" type="string">
      Identificatiecode voor lipsynchronisatietaak.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].status" type="string">
      Status van lipsynchronisatie: `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `REJECTED` of `CANCELED`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].videoUrl" type="string">
      URL van video met lipsynchronisatie wanneer voltooid.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].type" type="string">
      Modus voor lipsynchronisatie: `standard`, `pro` of `studio`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].activeSpeakerDetectionEnabled" type="boolean">
      Of actieve sprekerdetectie was ingeschakeld voor deze poging.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].dynamicSubtitles" type="object">
  Status van dynamische ondertitels wanneer beschikbaar.
</ResponseField>

<ResponseField name="translations[].publicationAttempts" type="array">
  Status van openbare publicatiepoging wanneer beschikbaar.
</ResponseField>

<ResponseField name="translations[].publishedVideos" type="array">
  Openbare gepubliceerde videoreferenties wanneer beschikbaar.
</ResponseField>

## Voorbeeld

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

## Fouten

| Status | Code                  | Beschrijving                                                   |
| ------ | --------------------- | -------------------------------------------------------------- |
| 401    | `MISSING_API_KEY`     | API-sleutel is vereist                                         |
| 401    | `INVALID_API_KEY`     | De verstrekte API-sleutel is ongeldig                          |
| 403    | `FORBIDDEN`           | U heeft geen toestemming om toegang te krijgen tot het project |
| 404    | `PROJECT_NOT_FOUND`   | Het project bestaat niet                                       |
| 429    | `RATE_LIMIT_EXCEEDED` | Te veel verzoeken                                              |
| 500    | `INTERNAL_ERROR`      | Onverwachte serverfout                                         |
