Obtener detalles del proyecto
curl --request GET \
--url https://api.voicecheap.ai/v1/projects/{projectId} \
--header 'x-api-key: <x-api-key>'import requests
url = "https://api.voicecheap.ai/v1/projects/{projectId}"
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
fetch('https://api.voicecheap.ai/v1/projects/{projectId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voicecheap.ai/v1/projects/{projectId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.voicecheap.ai/v1/projects/{projectId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.voicecheap.ai/v1/projects/{projectId}")
.header("x-api-key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voicecheap.ai/v1/projects/{projectId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"projectId": "<string>",
"projectName": "<string>",
"status": "<string>",
"workflow": "<string>",
"originalVideoUrl": "<string>",
"originalLanguage": "<string>",
"targetLanguages": [
"<string>"
],
"duration": 123,
"createdAt": 123,
"progress": {
"progress.step": "<string>",
"progress.transcriptionProgress": 123,
"progress.transcriptionStatus": "<string>"
},
"translations": [
{
"translations[].workId": "<string>",
"translations[].translatedVersionId": "<string>",
"translations[].targetLanguage": "<string>",
"translations[].status": "<string>",
"translations[].currentStep": "<string>",
"translations[].progress": 123,
"translations[].createdAt": 123,
"translations[].completedAt": 123,
"translations[].failedAt": 123,
"translations[].timedOutAt": 123,
"translations[].translatedVideoUrl": "<string>",
"translations[].translatedAudioUrl": "<string>",
"translations[].settings": {},
"translations[].error": {}
}
],
"translations[].lipSync": {
"translations[].lipSync.latest": {},
"translations[].lipSync.history": [
{}
],
"translations[].lipSync.history[].jobId": "<string>",
"translations[].lipSync.history[].status": "<string>",
"translations[].lipSync.history[].videoUrl": "<string>",
"translations[].lipSync.history[].type": "<string>",
"translations[].lipSync.history[].activeSpeakerDetectionEnabled": true
},
"translations[].dynamicSubtitles": {},
"translations[].publicationAttempts": [
{}
],
"translations[].publishedVideos": [
{}
]
}Traducción
Obtener detalles del proyecto
Recuperar detalles públicos del proyecto, historial de versiones traducidas e historial de sincronización labial
Obtener detalles del proyecto
curl --request GET \
--url https://api.voicecheap.ai/v1/projects/{projectId} \
--header 'x-api-key: <x-api-key>'import requests
url = "https://api.voicecheap.ai/v1/projects/{projectId}"
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
fetch('https://api.voicecheap.ai/v1/projects/{projectId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voicecheap.ai/v1/projects/{projectId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.voicecheap.ai/v1/projects/{projectId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.voicecheap.ai/v1/projects/{projectId}")
.header("x-api-key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.voicecheap.ai/v1/projects/{projectId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"projectId": "<string>",
"projectName": "<string>",
"status": "<string>",
"workflow": "<string>",
"originalVideoUrl": "<string>",
"originalLanguage": "<string>",
"targetLanguages": [
"<string>"
],
"duration": 123,
"createdAt": 123,
"progress": {
"progress.step": "<string>",
"progress.transcriptionProgress": 123,
"progress.transcriptionStatus": "<string>"
},
"translations": [
{
"translations[].workId": "<string>",
"translations[].translatedVersionId": "<string>",
"translations[].targetLanguage": "<string>",
"translations[].status": "<string>",
"translations[].currentStep": "<string>",
"translations[].progress": 123,
"translations[].createdAt": 123,
"translations[].completedAt": 123,
"translations[].failedAt": 123,
"translations[].timedOutAt": 123,
"translations[].translatedVideoUrl": "<string>",
"translations[].translatedAudioUrl": "<string>",
"translations[].settings": {},
"translations[].error": {}
}
],
"translations[].lipSync": {
"translations[].lipSync.latest": {},
"translations[].lipSync.history": [
{}
],
"translations[].lipSync.history[].jobId": "<string>",
"translations[].lipSync.history[].status": "<string>",
"translations[].lipSync.history[].videoUrl": "<string>",
"translations[].lipSync.history[].type": "<string>",
"translations[].lipSync.history[].activeSpeakerDetectionEnabled": true
},
"translations[].dynamicSubtitles": {},
"translations[].publicationAttempts": [
{}
],
"translations[].publishedVideos": [
{}
]
}Obtener detalles del proyecto
Recuperar una vista pública normalizada de un proyecto. Utilice este endpoint cuando necesite el historial de versiones traducidas, el historial de sincronización labial, el estado de los subtítulos dinámicos o el estado de publicación. Para sondeos frecuentes, siga utilizando Obtener estado de traducción. Este endpoint es más completo e intencionalmente devuelve más datos.Solicitud
Encabezados
string
requerido
Su clave de API VoiceCheap. Obtenga una en app.voicecheap.ai/page-api.
Parámetros de ruta
string
requerido
El identificador único del proyecto devuelto desde Crear proyecto o Iniciar traducción.
Respuesta
string
requerido
El identificador único del proyecto.
string
requerido
El nombre del proyecto.
string
requerido
Estado público del proyecto:
processing, success o failed.string
requerido
Flujo de trabajo de API:
translation o transcription. Los flujos de trabajo de transcripción alcanzan el éxito cuando finaliza la transcripción de origen.string
requerido
URL del archivo de video o audio original cargado.
string
requerido
El idioma original detectado o especificado.
string[]
requerido
Idiomas de destino asociados con el proyecto.
number
requerido
Duración del contenido en segundos.
number
requerido
Marca de tiempo Unix de cuando se creó el proyecto.
object
requerido
array
requerido
Historial de versiones traducidas, ordenado con la versión más reciente primero.
Mostrar propiedades de traducción
Mostrar propiedades de traducción
string
Identificador del trabajo de traducción.
string
Identificador de la versión traducida.
string
Idioma de destino para esta versión.
string
Estado de la versión de traducción:
in-progress, completed, not-started o failed.string
Paso actual de doblaje para esta versión.
number
Porcentaje aproximado de progreso de doblaje.
number
Marca de tiempo de cuando se creó esta versión traducida.
number
Marca de tiempo de finalización cuando esté disponible.
number
Marca de tiempo de fallo cuando esté disponible.
number
Marca de tiempo de tiempo de espera cuando esté disponible.
string
URL del video traducido.
string
URL del audio traducido.
object
Configuraciones públicas utilizadas para la versión traducida, tales como subtítulos, SmartSync, audio de fondo y modo de calidad.
object
Código de error y mensaje cuando la versión traducida falló.
object
Historial de sincronización labial para la versión traducida, solo presente cuando se ha solicitado la sincronización labial.
Mostrar propiedades de lipSync
Mostrar propiedades de lipSync
object
Último intento de sincronización labial.
array
Todos los intentos de sincronización labial para esta versión traducida, en orden de creación.
string
Identificador del trabajo de sincronización labial.
string
Estado de la sincronización labial:
PENDING, PROCESSING, COMPLETED, FAILED, REJECTED o CANCELED.string
URL del video con sincronización labial cuando se completa.
string
Modo de sincronización labial:
standard, pro o studio.boolean
Si la detección de hablante activo estaba habilitada para este intento.
object
Estado de los subtítulos dinámicos cuando están disponibles.
array
Estado del intento de publicación pública cuando está disponible.
array
Referencias de video publicado públicamente cuando están disponibles.
Ejemplo
cURL
curl -X GET "https://api.voicecheap.ai/v1/projects/abc123-def456-ghi789" \
-H "x-api-key: vc_your-api-key"
Response
{
"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
}
]
}
}
]
}
Errores
| Estado | Código | Descripción |
|---|---|---|
| 401 | MISSING_API_KEY | Se requiere la clave API |
| 401 | INVALID_API_KEY | La clave API proporcionada no es válida |
| 403 | FORBIDDEN | No tiene permiso para acceder al proyecto |
| 404 | PROJECT_NOT_FOUND | El proyecto no existe |
| 429 | RATE_LIMIT_EXCEEDED | Demasiadas solicitudes |
| 500 | INTERNAL_ERROR | Error inesperado del servidor |
¿Esta página le ayudó?

