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

# Obter Detalhes do Projeto

> Recupere detalhes públicos do projeto, histórico de versões traduzidas e histórico de sincronização labial

# Obter Detalhes do Projeto

Recupere uma visualização pública normalizada de um projeto. Use este endpoint quando precisar do histórico de versões traduzidas, histórico de sincronização labial, estado dinâmico de legendas ou estado de publicação.

Para consultas frequentes, continue usando [Obter Status da Tradução](/docs/pt/api-reference/translation-status). Este endpoint é mais rico e retorna intencionalmente mais dados.

## Solicitação

### Cabeçalhos

<ParamField header="x-api-key" type="string" required>
  Sua chave de API VoiceCheap. Obtenha uma em [app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api).
</ParamField>

### Parâmetros de Caminho

<ParamField path="projectId" type="string" required>
  O identificador único do projeto retornado de [Criar Projeto](/docs/pt/api-reference/create-project) ou [Iniciar Tradução](/docs/pt/api-reference/translate).
</ParamField>

## Resposta

<ResponseField name="projectId" type="string" required>
  O identificador único do projeto.
</ResponseField>

<ResponseField name="projectName" type="string" required>
  O nome do projeto.
</ResponseField>

<ResponseField name="status" type="string" required>
  Status público do projeto: `processing`, `success` ou `failed`.
</ResponseField>

<ResponseField name="workflow" type="string" required>
  Fluxo de trabalho da API: `translation` ou `transcription`. Os fluxos de trabalho de transcrição alcançam sucesso quando a transcrição da fonte é concluída.
</ResponseField>

<ResponseField name="originalVideoUrl" type="string" required>
  URL para o arquivo de vídeo ou áudio original enviado.
</ResponseField>

<ResponseField name="originalLanguage" type="string" required>
  O idioma original detectado ou especificado.
</ResponseField>

<ResponseField name="targetLanguages" type="string[]" required>
  Idiomas de destino associados ao projeto.
</ResponseField>

<ResponseField name="duration" type="number" required>
  Duração do conteúdo em segundos.
</ResponseField>

<ResponseField name="createdAt" type="number" required>
  Timestamp Unix de quando o projeto foi criado.
</ResponseField>

<ResponseField name="progress" type="object" required>
  Progresso atual no nível do projeto.

  <Expandable title="propriedades de progresso">
    <ResponseField name="progress.step" type="string">
      Etapa atual de criação ou transcrição do projeto.
    </ResponseField>

    <ResponseField name="progress.transcriptionProgress" type="number">
      Porcentagem aproximada de progresso da criação/transcrição do projeto.
    </ResponseField>

    <ResponseField name="progress.transcriptionStatus" type="string" required>
      Status da transcrição da fonte: `processing`, `success` ou `failed`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations" type="array" required>
  Histórico de versões traduzidas, ordenado com a versão mais recente primeiro.

  <Expandable title="propriedades de tradução">
    <ResponseField name="translations[].workId" type="string">
      Identificador do trabalho de tradução.
    </ResponseField>

    <ResponseField name="translations[].translatedVersionId" type="string">
      Identificador da versão traduzida.
    </ResponseField>

    <ResponseField name="translations[].targetLanguage" type="string">
      Idioma de destino para esta versão.
    </ResponseField>

    <ResponseField name="translations[].status" type="string">
      Status da versão de tradução: `in-progress`, `completed`, `not-started` ou `failed`.
    </ResponseField>

    <ResponseField name="translations[].currentStep" type="string">
      Etapa atual de dublagem para esta versão.
    </ResponseField>

    <ResponseField name="translations[].progress" type="number">
      Porcentagem aproximada de progresso da dublagem.
    </ResponseField>

    <ResponseField name="translations[].createdAt" type="number">
      Timestamp de quando esta versão traduzida foi criada.
    </ResponseField>

    <ResponseField name="translations[].completedAt" type="number">
      Timestamp de conclusão quando disponível.
    </ResponseField>

    <ResponseField name="translations[].failedAt" type="number">
      Timestamp de falha quando disponível.
    </ResponseField>

    <ResponseField name="translations[].timedOutAt" type="number">
      Timestamp de tempo limite quando disponível.
    </ResponseField>

    <ResponseField name="translations[].translatedVideoUrl" type="string">
      URL do vídeo traduzido.
    </ResponseField>

    <ResponseField name="translations[].translatedAudioUrl" type="string">
      URL do áudio traduzido.
    </ResponseField>

    <ResponseField name="translations[].settings" type="object">
      Configurações públicas usadas para a versão traduzida, como legendas, SmartSync, áudio de fundo e modo de qualidade.
    </ResponseField>

    <ResponseField name="translations[].error" type="object">
      Código de erro e mensagem quando a versão traduzida falha.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].lipSync" type="object">
  Histórico de sincronização labial para a versão traduzida, presente apenas quando a sincronização labial foi solicitada.

  <Expandable title="Propriedades de sincronização labial">
    <ResponseField name="translations[].lipSync.latest" type="object">
      Última tentativa de sincronização labial.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history" type="array">
      Todas as tentativas de sincronização labial para esta versão traduzida, em ordem de criação.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].jobId" type="string">
      Identificador do trabalho de sincronização labial.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].status" type="string">
      Status da sincronização labial: `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `REJECTED` ou `CANCELED`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].videoUrl" type="string">
      URL do vídeo com sincronização labial quando concluído.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].type" type="string">
      Modo de sincronização labial: `standard`, `pro` ou `studio`.
    </ResponseField>

    <ResponseField name="translations[].lipSync.history[].activeSpeakerDetectionEnabled" type="boolean">
      Se a detecção de orador ativo foi habilitada para esta tentativa.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="translations[].dynamicSubtitles" type="object">
  Estado das legendas dinâmicas quando disponível.
</ResponseField>

<ResponseField name="translations[].publicationAttempts" type="array">
  Estado da tentativa de publicação pública quando disponível.
</ResponseField>

<ResponseField name="translations[].publishedVideos" type="array">
  Referências de vídeo publicado publicamente quando disponível.
</ResponseField>

## Exemplo

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

## Erros

| Status | Código                | Descrição                                     |
| ------ | --------------------- | --------------------------------------------- |
| 401    | `MISSING_API_KEY`     | A chave de API é necessária                   |
| 401    | `INVALID_API_KEY`     | A chave de API fornecida é inválida           |
| 403    | `FORBIDDEN`           | Você não tem permissão para acessar o projeto |
| 404    | `PROJECT_NOT_FOUND`   | O projeto não existe                          |
| 429    | `RATE_LIMIT_EXCEEDED` | Muitas solicitações                           |
| 500    | `INTERNAL_ERROR`      | Erro inesperado do servidor                   |
