프로젝트 세부 정보 가져오기
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": [
{}
]
}번역
프로젝트 세부 정보 가져오기
공개 프로젝트 세부 정보, 번역 버전 기록 및 립싱크 기록을 검색합니다
프로젝트 세부 정보 가져오기
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": [
{}
]
}프로젝트 세부 정보 가져오기
프로젝트의 정규화된 공개 뷰를 검색합니다. 번역 버전 기록, 립싱크 기록, 동적 자막 상태 또는 게시 상태가 필요할 때 이 엔드포인트를 사용하세요. 빈번한 폴링을 위해서는 번역 상태 가져오기을 계속 사용하세요. 이 엔드포인트는 더 풍부하며 의도적으로 더 많은 데이터를 반환합니다.요청
헤더
string
필수
귀하의 VoiceCheap API 키입니다. app.voicecheap.ai/page-api에서 하나를 받으세요.
경로 매개변수
응답
string
필수
프로젝트의 고유 식별자입니다.
string
필수
프로젝트 이름입니다.
string
필수
공개 프로젝트 상태:
processing, success 또는 failed.string
필수
API 워크플로:
translation 또는 transcription. 소스 전사가 완료되면 전사 워크플로가 성공에 도달합니다.string
필수
원본 업로드된 비디오 또는 오디오 파일의 URL입니다.
string
필수
감지되었거나 지정된 원본 언어입니다.
string[]
필수
프로젝트와 관련된 대상 언어입니다.
number
필수
콘텐츠의 지속 시간(초)입니다.
number
필수
프로젝트가 생성된 Unix 타임스탬프입니다.
object
필수
array
필수
번역 버전 기록(최신 버전부터 정렬됨)입니다.
표시 번역 속성
표시 번역 속성
string
번역 작업 식별자입니다.
string
번역 버전 식별자입니다.
string
이 버전의 대상 언어입니다.
string
번역 버전 상태:
in-progress, completed, not-started 또는 failed.string
이 버전에 대한 현재 더빙 단계입니다.
number
대략적인 더빙 진행률(백분율)입니다.
number
이 번역 버전이 생성된 타임스탬프입니다.
number
사용 가능한 경우 완료 타임스탬프입니다.
number
사용 가능한 경우 실패 타임스탬프입니다.
number
사용 가능한 경우 시간 초과 타임스탬프입니다.
string
번역된 비디오 URL입니다.
string
번역된 오디오 URL.
object
자막, SmartSync, 배경 오디오, 품질 모드 등 번역 버전에 사용된 공개 설정.
object
번역 버전 실패 시 오류 코드 및 메시지.
object
번역 버전에 대한 립싱크 기록으로, 립싱크가 요청된 경우에만 표시됩니다.
object
사용 가능한 경우의 동적 자막 상태.
array
사용 가능한 경우의 공개 게시 시도 상태.
array
사용 가능한 경우의 공개 게시된 비디오 참조.
예시
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
}
]
}
}
]
}
오류
| 상태 | 코드 | 설명 |
|---|---|---|
| 401 | MISSING_API_KEY | API 키가 필요합니다 |
| 401 | INVALID_API_KEY | 제공된 API 키가 유효하지 않습니다 |
| 403 | FORBIDDEN | 프로젝트에 액세스할 권한이 없습니다 |
| 404 | PROJECT_NOT_FOUND | 프로젝트가 존재하지 않습니다 |
| 429 | RATE_LIMIT_EXCEEDED | 너무 많은 요청 |
| 500 | INTERNAL_ERROR | 예기치 않은 서버 오류 |
이 페이지가 도움이 되었나요?

