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

# Pobierz szczegóły projektu

> Pobierz publiczne szczegóły projektu, historię przetłumaczonych wersji oraz historię synchronizacji ruchu ust

# Pobierz szczegóły projektu

Pobierz znormalizowany publiczny widok projektu. Użyj tego punktu końcowego, gdy potrzebujesz historii przetłumaczonych wersji, historii synchronizacji ruchu ust, stanu dynamicznych napisów lub stanu publikacji.

W przypadku częstego odpytywania, nadal używaj [Pobierz status tłumaczenia](/docs/pl/api-reference/translation-status). Ten punkt końcowy jest bogatszy i celowo zwraca więcej danych.

## Żądanie

### Nagłówki

<ParamField header="x-api-key" type="string" required>
  Twój klucz API VoiceCheap. Uzyskaj go z [app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api).
</ParamField>

### Parametry ścieżki

<ParamField path="projectId" type="string" required>
  Unikalny identyfikator projektu zwrócony z [Utwórz projekt](/docs/pl/api-reference/create-project) lub [Rozpocznij tłumaczenie](/docs/pl/api-reference/translate).
</ParamField>

## Odpowiedź

<ResponseField name="projectId" type="string" required>
  Unikalny identyfikator projektu.
</ResponseField>

<ResponseField name="projectName" type="string" required>
  Nazwa projektu.
</ResponseField>

<ResponseField name="status" type="string" required>
  Publiczny status projektu: `processing`, `success` lub `failed`.
</ResponseField>

<ResponseField name="workflow" type="string" required>
  Przepływ pracy API: `translation` lub `transcription`. Przepływy pracy transkrypcji osiągają sukces po zakończeniu transkrypcji źródłowej.
</ResponseField>

<ResponseField name="originalVideoUrl" type="string" required>
  URL do oryginalnego przesłanego pliku wideo lub audio.
</ResponseField>

<ResponseField name="originalLanguage" type="string" required>
  Wykryty lub określony język oryginalny.
</ResponseField>

<ResponseField name="targetLanguages" type="string[]" required>
  Języki docelowe powiązane z projektem.
</ResponseField>

<ResponseField name="duration" type="number" required>
  Czas trwania zawartości w sekundach.
</ResponseField>

<ResponseField name="createdAt" type="number" required>
  Znacznik czasu Unix utworzenia projektu.
</ResponseField>

<ResponseField name="progress" type="object" required>
  Bieżący postęp na poziomie projektu.

  <Expandable title="właściwości postępu">
    <ResponseField name="progress.step" type="string">
      Bieżący krok tworzenia lub transkrypcji projektu.
    </ResponseField>

    <ResponseField name="progress.transcriptionProgress" type="number">
      Przybliżony procent postępu tworzenia/transkrypcji projektu.
    </ResponseField>

    <ResponseField name="progress.transcriptionStatus" type="string" required>
      Status transkrypcji źródłowej: `processing`, `success` lub `failed`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations" type="array" required>
  Historia przetłumaczonych wersji, posortowana od najnowszej.

  <Expandable title="właściwości tłumaczenia">
    <ResponseField name="translations[].workId" type="string">
      Identyfikator pracy tłumaczeniowej.
    </ResponseField>

    <ResponseField name="translations[].translatedVersionId" type="string">
      Identyfikator przetłumaczonej wersji.
    </ResponseField>

    <ResponseField name="translations[].targetLanguage" type="string">
      Język docelowy dla tej wersji.
    </ResponseField>

    <ResponseField name="translations[].status" type="string">
      Status wersji tłumaczenia: `in-progress`, `completed`, `not-started` lub `failed`.
    </ResponseField>

    <ResponseField name="translations[].currentStep" type="string">
      Bieżący krok dubbing dla tej wersji.
    </ResponseField>

    <ResponseField name="translations[].progress" type="number">
      Przybliżony procent postępu dubbing.
    </ResponseField>

    <ResponseField name="translations[].createdAt" type="number">
      Znacznik czasu utworzenia tej przetłumaczonej wersji.
    </ResponseField>

    <ResponseField name="translations[].completedAt" type="number">
      Znacznik czasu zakończenia, jeśli jest dostępny.
    </ResponseField>

    <ResponseField name="translations[].failedAt" type="number">
      Znacznik czasu błędu, jeśli jest dostępny.
    </ResponseField>

    <ResponseField name="translations[].timedOutAt" type="number">
      Znacznik czasu przekroczenia limitu czasu, jeśli jest dostępny.
    </ResponseField>

    <ResponseField name="translations[].translatedVideoUrl" type="string">
      URL przetłumaczonego wideo.
    </ResponseField>

    <ResponseField name="translations[].translatedAudioUrl" type="string">
      Adres URL przetłumaczonego dźwięku.
    </ResponseField>

    <ResponseField name="translations[].settings" type="object">
      Ustawienia publiczne użyte dla przetłumaczonej wersji, takie jak napisy, SmartSync, dźwięk w tle oraz tryb jakości.
    </ResponseField>

    <ResponseField name="translations[].error" type="object">
      Kod błędu i komunikat w przypadku niepowodzenia przetłumaczonej wersji.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].lipSync" type="object">
  Historia synchronizacji ruchu ust dla przetłumaczonej wersji, dostępna tylko wtedy, gdy zażądano synchronizacji ruchu ust.

  <Expandable title="właściwości lipSync">
    <ResponseField name="translations[].lipSync.latest" type="object">
      Ostatnia próba synchronizacji ruchu ust.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history" type="array">
      Wszystkie próby synchronizacji ruchu ust dla tej przetłumaczonej wersji, w kolejności tworzenia.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].jobId" type="string">
      Identyfikator zadania synchronizacji ruchu ust.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].status" type="string">
      Status synchronizacji ruchu ust: `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `REJECTED` lub `CANCELED`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].videoUrl" type="string">
      Adres URL wideo z synchronizacją ruchu ust po zakończeniu.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].type" type="string">
      Tryb synchronizacji ruchu ust: `standard`, `pro` lub `studio`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].activeSpeakerDetectionEnabled" type="boolean">
      Czy wykrywanie aktywnego mówcy było włączone dla tej próby.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].dynamicSubtitles" type="object">
  Stan dynamicznych napisów, gdy są dostępne.
</ResponseField>

<ResponseField name="translations[].publicationAttempts" type="array">
  Stan publicznej próby publikacji, gdy jest dostępny.
</ResponseField>

<ResponseField name="translations[].publishedVideos" type="array">
  Publiczne odniesienia do opublikowanego wideo, gdy są dostępne.
</ResponseField>

## Przykład

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

## Błędy

| Status | Kod                   | Opis                                |
| ------ | --------------------- | ----------------------------------- |
| 401    | `MISSING_API_KEY`     | Wymagany jest klucz API             |
| 401    | `INVALID_API_KEY`     | Podany klucz API jest nieprawidłowy |
| 403    | `FORBIDDEN`           | Brak uprawnień dostępu do projektu  |
| 404    | `PROJECT_NOT_FOUND`   | Projekt nie istnieje                |
| 429    | `RATE_LIMIT_EXCEEDED` | Zbyt wiele żądań                    |
| 500    | `INTERNAL_ERROR`      | Nieoczekiwany błąd serwera          |
