> ## 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/zh/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/zh/api-reference/create-project) 或 [开始翻译](/docs/zh/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`      | 意外的服务器错误     |
