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

# 프로젝트 세부 정보 가져오기

> 공개 프로젝트 세부 정보, 번역 버전 기록 및 립싱크 기록을 검색합니다

# 프로젝트 세부 정보 가져오기

프로젝트의 정규화된 공개 뷰를 검색합니다. 번역 버전 기록, 립싱크 기록, 동적 자막 상태 또는 게시 상태가 필요할 때 이 엔드포인트를 사용하세요.

빈번한 폴링을 위해서는 [번역 상태 가져오기](/docs/ko/api-reference/translation-status)을 계속 사용하세요. 이 엔드포인트는 더 풍부하며 의도적으로 더 많은 데이터를 반환합니다.

## 요청

### 헤더

<ParamField header="x-api-key" type="string" required>
  귀하의 VoiceCheap API 키입니다. [app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api)에서 하나를 받으세요.
</ParamField>

### 경로 매개변수

<ParamField path="projectId" type="string" required>
  [프로젝트 생성](/docs/ko/api-reference/create-project) 또는 [번역 시작](/docs/ko/api-reference/translate)에서 반환된 프로젝트의 고유 식별자입니다.
</ParamField>

## 응답

<ResponseField name="projectId" type="string" required>
  프로젝트의 고유 식별자입니다.
</ResponseField>

<ResponseField name="projectName" type="string" required>
  프로젝트 이름입니다.
</ResponseField>

<ResponseField name="status" type="string" required>
  공개 프로젝트 상태: `processing`, `success` 또는 `failed`.
</ResponseField>

<ResponseField name="workflow" type="string" required>
  API 워크플로: `translation` 또는 `transcription`. 소스 전사가 완료되면 전사 워크플로가 성공에 도달합니다.
</ResponseField>

<ResponseField name="originalVideoUrl" type="string" required>
  원본 업로드된 비디오 또는 오디오 파일의 URL입니다.
</ResponseField>

<ResponseField name="originalLanguage" type="string" required>
  감지되었거나 지정된 원본 언어입니다.
</ResponseField>

<ResponseField name="targetLanguages" type="string[]" required>
  프로젝트와 관련된 대상 언어입니다.
</ResponseField>

<ResponseField name="duration" type="number" required>
  콘텐츠의 지속 시간(초)입니다.
</ResponseField>

<ResponseField name="createdAt" type="number" required>
  프로젝트가 생성된 Unix 타임스탬프입니다.
</ResponseField>

<ResponseField name="progress" type="object" required>
  현재 프로젝트 수준의 진행 상황입니다.

  <Expandable title="진행 상황 속성">
    <ResponseField name="progress.step" type="string">
      현재 프로젝트 생성 또는 전사 단계입니다.
    </ResponseField>

    <ResponseField name="progress.transcriptionProgress" type="number">
      대략적인 프로젝트 생성/전사 진행률(백분율)입니다.
    </ResponseField>

    <ResponseField name="progress.transcriptionStatus" type="string" required>
      소스 전사 상태: `processing`, `success` 또는 `failed`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations" type="array" required>
  번역 버전 기록(최신 버전부터 정렬됨)입니다.

  <Expandable title="번역 속성">
    <ResponseField name="translations[].workId" type="string">
      번역 작업 식별자입니다.
    </ResponseField>

    <ResponseField name="translations[].translatedVersionId" type="string">
      번역 버전 식별자입니다.
    </ResponseField>

    <ResponseField name="translations[].targetLanguage" type="string">
      이 버전의 대상 언어입니다.
    </ResponseField>

    <ResponseField name="translations[].status" type="string">
      번역 버전 상태: `in-progress`, `completed`, `not-started` 또는 `failed`.
    </ResponseField>

    <ResponseField name="translations[].currentStep" type="string">
      이 버전에 대한 현재 더빙 단계입니다.
    </ResponseField>

    <ResponseField name="translations[].progress" type="number">
      대략적인 더빙 진행률(백분율)입니다.
    </ResponseField>

    <ResponseField name="translations[].createdAt" type="number">
      이 번역 버전이 생성된 타임스탬프입니다.
    </ResponseField>

    <ResponseField name="translations[].completedAt" type="number">
      사용 가능한 경우 완료 타임스탬프입니다.
    </ResponseField>

    <ResponseField name="translations[].failedAt" type="number">
      사용 가능한 경우 실패 타임스탬프입니다.
    </ResponseField>

    <ResponseField name="translations[].timedOutAt" type="number">
      사용 가능한 경우 시간 초과 타임스탬프입니다.
    </ResponseField>

    <ResponseField name="translations[].translatedVideoUrl" type="string">
      번역된 비디오 URL입니다.
    </ResponseField>

    <ResponseField name="translations[].translatedAudioUrl" type="string">
      번역된 오디오 URL.
    </ResponseField>

    <ResponseField name="translations[].settings" type="object">
      자막, SmartSync, 배경 오디오, 품질 모드 등 번역 버전에 사용된 공개 설정.
    </ResponseField>

    <ResponseField name="translations[].error" type="object">
      번역 버전 실패 시 오류 코드 및 메시지.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].lipSync" type="object">
  번역 버전에 대한 립싱크 기록으로, 립싱크가 요청된 경우에만 표시됩니다.

  <Expandable title="lipSync 속성">
    <ResponseField name="translations[].lipSync.latest" type="object">
      최신 립싱크 시도.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history" type="array">
      생성 순서대로 나열된 이 번역 버전에 대한 모든 립싱크 시도.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].jobId" type="string">
      립싱크 작업 식별자.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].status" type="string">
      립싱크 상태: `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `REJECTED` 또는 `CANCELED`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].videoUrl" type="string">
      완료된 립싱크 비디오 URL.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].type" type="string">
      립싱크 모드: `standard`, `pro` 또는 `studio`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].activeSpeakerDetectionEnabled" type="boolean">
      이 시도에 대해 활성 화자 감지가 활성화되었는지 여부.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].dynamicSubtitles" type="object">
  사용 가능한 경우의 동적 자막 상태.
</ResponseField>

<ResponseField name="translations[].publicationAttempts" type="array">
  사용 가능한 경우의 공개 게시 시도 상태.
</ResponseField>

<ResponseField name="translations[].publishedVideos" type="array">
  사용 가능한 경우의 공개 게시된 비디오 참조.
</ResponseField>

## 예시

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

## 오류

| 상태  | 코드                    | 설명                   |
| --- | --------------------- | -------------------- |
| 401 | `MISSING_API_KEY`     | API 키가 필요합니다         |
| 401 | `INVALID_API_KEY`     | 제공된 API 키가 유효하지 않습니다 |
| 403 | `FORBIDDEN`           | 프로젝트에 액세스할 권한이 없습니다  |
| 404 | `PROJECT_NOT_FOUND`   | 프로젝트가 존재하지 않습니다      |
| 429 | `RATE_LIMIT_EXCEEDED` | 너무 많은 요청             |
| 500 | `INTERNAL_ERROR`      | 예기치 않은 서버 오류         |
