curl --request POST 'https://api.voicecheap.ai/v1/actions/transcripts_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"projectId":"project_launch_2026","source":"original","outputFormat":"json","includeSpeakerLabels":false}'
const input = {
projectId: 'project_launch_2026',
source: 'original',
outputFormat: 'json',
includeSpeakerLabels: false,
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/transcripts_get', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/transcripts_get",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"projectId": "project_launch_2026", "source": "original", "outputFormat": "json", "includeSpeakerLabels": False},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"format": "json",
"transcript": {
"source": "original",
"language": "fr",
"duration": 75,
"text": "Bienvenue au lancement.",
"speakers": [
{
"id": 0,
"label": "Speaker 1"
}
],
"segments": [
{
"index": 0,
"text": "Bienvenue au lancement.",
"begin": 0,
"end": 2,
"duration": 2,
"speaker": 0,
"language": "fr"
}
]
},
"contentType": "application/json"
}
}
전사문 및 편집
프로젝트 전사문 조회 또는 내보내기
원문 또는 번역 전사문을 JSON, SRT 또는 VTT로 조회하며, 선택적으로 화자 레이블을 포함할 수 있습니다.
POST
/
v1
/
actions
/
transcripts_get
curl --request POST 'https://api.voicecheap.ai/v1/actions/transcripts_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"projectId":"project_launch_2026","source":"original","outputFormat":"json","includeSpeakerLabels":false}'
const input = {
projectId: 'project_launch_2026',
source: 'original',
outputFormat: 'json',
includeSpeakerLabels: false,
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/transcripts_get', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/transcripts_get",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"projectId": "project_launch_2026", "source": "original", "outputFormat": "json", "includeSpeakerLabels": False},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"format": "json",
"transcript": {
"source": "original",
"language": "fr",
"duration": 75,
"text": "Bienvenue au lancement.",
"speakers": [
{
"id": 0,
"label": "Speaker 1"
}
],
"segments": [
{
"index": 0,
"text": "Bienvenue au lancement.",
"begin": 0,
"end": 2,
"duration": 2,
"speaker": 0,
"language": "fr"
}
]
},
"contentType": "application/json"
}
}
원문 또는 번역 전사문을 JSON, SRT 또는 VTT로 조회하며, 선택적으로 화자 레이블을 포함할 수 있습니다.
필요한 권한:
POST https://api.voicecheap.ai/v1/actions/transcripts_get
인증 및 권한
string
필수
이 헤더에 VoiceCheap API 키를 전달하세요. 동일한 API 키를 사용하는 Authorization: Bearer도 지원합니다. OAuth 액세스 토큰은 MCP에서만 허용되며, 이
REST 엔드포인트에서는 사용할 수 없습니다.
transcription:read.
활성 유료 구독이 필요합니다. 권한은 팀 역할, 리소스 소유권, 미디어 크레딧 또는 요금제 한도를 변경하지 않습니다.
매개변수
string
필수
텍스트 값입니다.최소 길이: 1. 최대 길이: 200. 패턴:
^[^/\\]+$.string
텍스트 값입니다.허용값: “original”, “translated”. 기본값: “original”.
string
텍스트 값입니다.허용값: “afrikaans”, “albanian”, “amharic”, “arabic”, “armenian”, “assamese”, “azerbaijani”, “basque”, “belarusian”, “bengali”, “bosnian”, “bulgarian”, “catalan”, “croatian”, “czech”, “danish”, “dutch”, “english”, “british english”, “estonian”, “finnish”, “french”, “french canadian”, “galician”, “german”, “greek”, “gujarati”, “hebrew”, “hindi”, “hungarian”, “icelandic”, “indonesian”, “irish”, “italian”, “japanese”, “kannada”, “kazakh”, “khmer”, “korean”, “lao”, “latvian”, “lithuanian”, “macedonian”, “malay”, “malayalam”, “mandarin”, “marathi”, “mongolian”, “nepali”, “norwegian”, “persian”, “polish”, “portuguese”, “brazilian portuguese”, “pt_brazil”, “punjabi”, “romanian”, “russian”, “serbian”, “slovak”, “slovenian”, “spanish”, “swahili”, “swedish”, “tagalog”, “tamil”, “telugu”, “thai”, “turkish”, “ukrainian”, “urdu”, “vietnamese”, “welsh”, “yoruba”, “zulu”.
string
텍스트 값입니다.허용값: “json”, “srt”, “vtt”. 기본값: “json”.
boolean
불리언 값입니다.기본값: false.
전체 입력 스키마
전체 입력 스키마
아래 JSON Schema는 검색을 통해 제공되는 정확한 필드 이름, 중첩 유형, 기본값, 범위 및 허용값을 유지합니다. 추가적인 필드 간 규칙은 작업 참고 사항에 나와 있습니다.
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[^/\\\\]+$"
},
"source": {
"default": "original",
"type": "string",
"enum": ["original", "translated"]
},
"targetLanguage": {
"type": "string",
"enum": [
"afrikaans",
"albanian",
"amharic",
"arabic",
"armenian",
"assamese",
"azerbaijani",
"basque",
"belarusian",
"bengali",
"bosnian",
"bulgarian",
"catalan",
"croatian",
"czech",
"danish",
"dutch",
"english",
"british english",
"estonian",
"finnish",
"french",
"french canadian",
"galician",
"german",
"greek",
"gujarati",
"hebrew",
"hindi",
"hungarian",
"icelandic",
"indonesian",
"irish",
"italian",
"japanese",
"kannada",
"kazakh",
"khmer",
"korean",
"lao",
"latvian",
"lithuanian",
"macedonian",
"malay",
"malayalam",
"mandarin",
"marathi",
"mongolian",
"nepali",
"norwegian",
"persian",
"polish",
"portuguese",
"brazilian portuguese",
"pt_brazil",
"punjabi",
"romanian",
"russian",
"serbian",
"slovak",
"slovenian",
"spanish",
"swahili",
"swedish",
"tagalog",
"tamil",
"telugu",
"thai",
"turkish",
"ukrainian",
"urdu",
"vietnamese",
"welsh",
"yoruba",
"zulu"
]
},
"outputFormat": {
"default": "json",
"type": "string",
"enum": ["json", "srt", "vtt"]
},
"includeSpeakerLabels": {
"default": false,
"type": "boolean"
}
},
"required": ["projectId"],
"additionalProperties": false
}
요청 예제
예제의 리소스 식별자와 미디어 키를 계정에서 반환된 값으로 바꾸세요. 동일한 변경 작업을 재시도할 때는 요청 식별자를 유지하세요.curl --request POST 'https://api.voicecheap.ai/v1/actions/transcripts_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"projectId":"project_launch_2026","source":"original","outputFormat":"json","includeSpeakerLabels":false}'
const input = {
projectId: 'project_launch_2026',
source: 'original',
outputFormat: 'json',
includeSpeakerLabels: false,
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/transcripts_get', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/transcripts_get",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"projectId": "project_launch_2026", "source": "original", "outputFormat": "json", "includeSpeakerLabels": False},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
응답
성공한 첫 실행은 작업 결과를 data 아래에 포함하여 HTTP 200을 반환합니다. 재전송 시에는 저장된 요청 상태를 대신 반환할 수 있습니다. 예제는 지원되는 응답 중 하나를 보여주며 모든 선택 필드를 포함하지는 않습니다. 형식이 지정된 전사문 객체를 반환합니다. JSON에는 format, transcript 및 contentType이 포함되며, SRT/VTT에는 content와 fileExtension도 포함됩니다.{
"data": {
"format": "json",
"transcript": {
"source": "original",
"language": "fr",
"duration": 75,
"text": "Bienvenue au lancement.",
"speakers": [
{
"id": 0,
"label": "Speaker 1"
}
],
"segments": [
{
"index": 0,
"text": "Bienvenue au lancement.",
"begin": 0,
"end": 2,
"duration": 2,
"speaker": 0,
"language": "fr"
}
]
},
"contentType": "application/json"
}
}
결과 필드
| 필드 | 설명 |
|---|---|
data.format | json, srt 또는 vtt입니다. |
data.contentType | application/json, application/x-subrip; charset=utf-8 또는 text/vtt; charset=utf-8입니다. |
data.content | srt/vtt에만 사용되는 자막 텍스트입니다. |
data.fileExtension | 텍스트 내보내기에만 사용하는 srt 또는 vtt입니다. |
data.transcript.source | original 또는 translated입니다. |
data.transcript.language | 전사문 언어입니다. |
data.transcript.duration | 저장된 미디어 길이와 마지막 세그먼트 종료 시간 중 더 큰 값이며, 단위는 초입니다. |
data.transcript.text | 비어 있지 않은 세그먼트 텍스트를 연결한 값입니다. |
data.transcript.speakers | 숫자 id 순서로 정렬된 중복 없는 화자 목록이며, 생성된 Speaker N 레이블이 포함됩니다. |
data.transcript.segments | begin과 index 순서로 정렬된 정규화된 세그먼트입니다. index, text, begin, end, duration, speaker, language와 선택적 confidence, finalSpeedFactor, words가 포함됩니다. |
data.transcript.workId | 번역 전사문에 포함됩니다. |
data.transcript.targetLanguage | 번역 전사문에 포함됩니다. |
data.transcript.segments[].begin | 소수점 셋째 자리까지 정규화한 초 단위 시작 시점입니다. |
data.transcript.segments[].end | 소수점 셋째 자리까지 정규화한 초 단위 종료 시점입니다. |
data.transcript.segments[].duration | 양수인 초 단위 세그먼트 길이입니다. |
data.transcript.segments[].speaker | 0부터 시작하는 화자 번호입니다. |
data.transcript.segments[].finalSpeedFactor | 번역 음성 길이를 해당 세그먼트 구간의 길이로 나누어 소수점 셋째 자리까지 반올림한 선택적인 값입니다. 1보다 큰 값은 음성을 빠르게 해야 했음을 나타냅니다. |
outputFormat은 srt, source는 translated, targetLanguage는 english, includeSpeakerLabels는 true입니다.
화자 접두사가 포함된 번역 전사문과 SRT 콘텐츠를 반환합니다.HTTP 200
{
"data": {
"format": "srt",
"transcript": {
"source": "translated",
"language": "english",
"duration": 75,
"text": "Welcome to the product launch.",
"speakers": [
{
"id": 0,
"label": "Speaker 1"
}
],
"segments": [
{
"index": 0,
"text": "Welcome to the product launch.",
"begin": 0,
"end": 2,
"duration": 2,
"speaker": 0,
"language": "english",
"finalSpeedFactor": 1.08
}
],
"workId": "5f8423d1-e4c0-4f80-9e3f-eed959389e24",
"targetLanguage": "english"
},
"content": "1\n00:00:00,000 --> 00:00:02,000\nSpeaker 1: Welcome to the product launch.\n",
"contentType": "application/x-subrip; charset=utf-8",
"fileExtension": "srt"
}
}
outputFormat은 vtt, source는 translated, targetLanguage는 english, includeSpeakerLabels는 true입니다.
음성 레이블이 포함된 번역 전사문과 WEBVTT 콘텐츠를 반환합니다.HTTP 200
{
"data": {
"format": "vtt",
"transcript": {
"source": "translated",
"language": "english",
"duration": 75,
"text": "Welcome to the product launch.",
"speakers": [
{
"id": 0,
"label": "Speaker 1"
}
],
"segments": [
{
"index": 0,
"text": "Welcome to the product launch.",
"begin": 0,
"end": 2,
"duration": 2,
"speaker": 0,
"language": "english",
"finalSpeedFactor": 1.08
}
],
"workId": "5f8423d1-e4c0-4f80-9e3f-eed959389e24",
"targetLanguage": "english"
},
"content": "WEBVTT\n\n1\n00:00:00.000 --> 00:00:02.000\n<v Speaker 1>Welcome to the product launch.\n",
"contentType": "text/vtt; charset=utf-8",
"fileExtension": "vtt"
}
}
작업 참고 사항
- source의 기본값은 original, outputFormat의 기본값은 json, includeSpeakerLabels의 기본값은 false입니다. source가 translated이면 targetLanguage가 필요합니다.
- 번역 전사문의 경우 targetLanguage와 일치하는 가장 최신 언어 작업이 선택됩니다. 이 액션에는 workId 또는 translatedVersionId 입력이 없습니다.
- SRT 및 VTT 내보내기도 JSON 액션 결과로 유지됩니다. content에 자막 텍스트가 포함되며 같은 객체에서 transcript도 계속 사용할 수 있습니다. 이 핸들러는 다운로드 가능한 원시 응답을 반환하지 않습니다.
- includeSpeakerLabels는 텍스트 내보내기 큐에만 영향을 줍니다. SRT는 Speaker N: 접두사를 사용하고 VTT는 음성 태그를 사용합니다.
- 저장된 전사문 단어가 있으면 index, text, speaker 및 선택적 confidence가 표시됩니다. 존재하지 않는 단어별 타임스탬프를 만들어 내지 않습니다. 생성된 음성의 타이밍이 있으면 번역 세그먼트에 finalSpeedFactor가 표시될 수 있습니다.
사용량
성공한 호출마다 월간 API/MCP 호출 1회가 차감됩니다. 미디어 크레딧과 해당 작업의 생성 허용량도 적용됩니다.오류
| HTTP 상태 | 코드 | 의미 또는 복구 방법 |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | 자격 증명이 access_token 또는 api_key 쿼리 매개변수로 제공되었습니다. 자격 증명은 헤더로 보내세요. |
| 400 | VALIDATION_ERROR | 스키마에 따라 입력을 수정하세요. 유효하지 않거나 일관되지 않은 값은 실행 전에 거부됩니다. |
| 401 | API_KEY_EXPIRED | API 키가 만료되었습니다. |
| 401 | INVALID_API_KEY | 유효하고 만료되지 않은 API 키를 제공하세요. |
| 401 | INVALID_CREDENTIAL | Authorization 헤더의 형식이 잘못되었거나 x-api-key와 충돌합니다. |
| 401 | MISSING_CREDENTIAL | 사용 가능한 헤더 자격 증명이 전달되지 않았거나 4096자를 초과했습니다. |
| 401 | USER_NOT_FOUND | 이 자격 증명에 연결된 계정이 더 이상 존재하지 않습니다. |
| 403 | AMBIGUOUS_TEAM_API_KEY | 이 자격 증명의 사용자가 둘 이상의 팀에 속해 있어 청구 컨텍스트가 모호합니다. |
| 403 | FORBIDDEN | 인증된 작업 수행자가 이 프로젝트에 접근할 수 없습니다. |
| 403 | INSUFFICIENT_SCOPE | 필요한 모든 권한을 부여하거나 다른 자격 증명을 사용하세요. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | 계정의 통합 한도를 확인할 수 없습니다. |
| 403 | SUBSCRIPTION_REQUIRED | 활성 유료 구독을 사용하세요. |
| 403 | TEAM_OWNER_NOT_FOUND | 실제로 적용되는 팀 소유자 계정을 찾을 수 없습니다. |
| 404 | PROJECT_NOT_FOUND | 접근 가능한 계정에 프로젝트가 없습니다. |
| 404 | TRANSCRIPT_NOT_FOUND | 요청한 원본 및 대상 언어에 사용 가능한 전사문이 없습니다. |
| 409 | TRANSCRIPT_NOT_READY | 요청한 원본 또는 번역 전사문을 아직 처리 중입니다. |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | 월간 한도가 초기화될 때까지 기다리거나 요금제를 변경하세요. |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Retry-After가 있으면 지정된 시간만큼 기다리고 백오프를 적용하세요. |
| 500 | INTERNAL_ERROR | 변경 작업을 재시도하기로 결정하기 전에 저장된 요청 상태와 리소스 기록을 확인하세요. |
| 503 | SERVER_RESTARTING | 서버가 다시 시작 중입니다. 잠시 후 재시도하고, 변경 작업의 경우 동일한 요청 식별자를 유지하세요. |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["transcription:read"]
}
}
이 페이지가 도움이 되었나요?

