curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_translate' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"subtitleContent":"1\n00:00:00,000 --> 00:00:01,500\nHello world.\n","fileName":"interview.srt","format":"srt","sourceLanguage":"english","targetLanguage":"french","requestId":"13579bdf-2468-4ace-8bdf-0123456789ab"}'
const input = {
subtitleContent: '1\n00:00:00,000 --> 00:00:01,500\nHello world.\n',
fileName: 'interview.srt',
format: 'srt',
sourceLanguage: 'english',
targetLanguage: 'french',
requestId: '13579bdf-2468-4ace-8bdf-0123456789ab',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_translate', {
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/subtitles_translate",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"subtitleContent": "1\n00:00:00,000 --> 00:00:01,500\nHello world.\n", "fileName": "interview.srt", "format": "srt", "sourceLanguage": "english", "targetLanguage": "french", "requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"status": "running",
"pollAction": "action_request_get",
"pollAfterSeconds": 5
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "subtitles_translate",
"createdAt": 1792152000000,
"fileName": "voicecheap-subtitles_translate-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 365,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list"
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
자막 및 캡션
자막 번역
타이밍과 서식을 유지하며 SRT 또는 VTT 자막을 번역합니다. 결과를 자막 번역 기록에 저장합니다. 간결한 저장 결과 참조를 반환하며, 전체 출력은 해당 참조의 getAction 또는 downloadAction으로 조회합니다.
POST
/
v1
/
actions
/
subtitles_translate
curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_translate' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"subtitleContent":"1\n00:00:00,000 --> 00:00:01,500\nHello world.\n","fileName":"interview.srt","format":"srt","sourceLanguage":"english","targetLanguage":"french","requestId":"13579bdf-2468-4ace-8bdf-0123456789ab"}'
const input = {
subtitleContent: '1\n00:00:00,000 --> 00:00:01,500\nHello world.\n',
fileName: 'interview.srt',
format: 'srt',
sourceLanguage: 'english',
targetLanguage: 'french',
requestId: '13579bdf-2468-4ace-8bdf-0123456789ab',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_translate', {
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/subtitles_translate",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"subtitleContent": "1\n00:00:00,000 --> 00:00:01,500\nHello world.\n", "fileName": "interview.srt", "format": "srt", "sourceLanguage": "english", "targetLanguage": "french", "requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"status": "running",
"pollAction": "action_request_get",
"pollAfterSeconds": 5
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "subtitles_translate",
"createdAt": 1792152000000,
"fileName": "voicecheap-subtitles_translate-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 365,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list"
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
타이밍과 서식을 유지하며 SRT 또는 VTT 자막을 번역합니다. 결과를 자막 번역 기록에 저장합니다. 간결한 저장 결과 참조를 반환하며, 전체 출력은 해당 참조의 getAction 또는 downloadAction으로 조회합니다.
필요한 권한:
POST https://api.voicecheap.ai/v1/actions/subtitles_translate
인증 및 권한
string
필수
이 헤더에 VoiceCheap API 키를 전달하세요. 동일한 API 키를 사용하는 Authorization: Bearer도 지원합니다. OAuth 액세스 토큰은 MCP에서만 허용되며, 이
REST 엔드포인트에서는 사용할 수 없습니다.
subtitles:write.
활성 유료 구독이 필요합니다. 권한은 팀 역할, 리소스 소유권, 미디어 크레딧 또는 요금제 한도를 변경하지 않습니다.
매개변수
string
필수
텍스트 값입니다.최소 길이: 1. 최대 길이: 2097152.
string
텍스트 값입니다.최소 길이: 1. 최대 길이: 255. 패턴:
^[^/\\\r\n\0]+$.string
텍스트 값입니다.허용값: “srt”, “vtt”.
string
텍스트 값입니다.최소 길이: 2. 최대 길이: 60.
string
필수
텍스트 값입니다.최소 길이: 2. 최대 길이: 60.
string
전송 계층에서는 선택 사항입니다. 생략하면 서버가 유효성 검사 전에 식별자를 추가합니다. 응답이 유실된 경우 안전하게 복구할 수 있도록 고정된 UUID v4를 직접 제공하세요.형식: “uuid”. 패턴:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$.전체 입력 스키마
전체 입력 스키마
아래 JSON Schema는 검색을 통해 제공되는 정확한 필드 이름, 중첩 유형, 기본값, 범위 및 허용값을 유지합니다. 추가적인 필드 간 규칙은 작업 참고 사항에 나와 있습니다.
{
"type": "object",
"properties": {
"subtitleContent": {
"type": "string",
"minLength": 1,
"maxLength": 2097152
},
"fileName": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"pattern": "^[^/\\\\\\r\\n\\0]+$"
},
"format": {
"type": "string",
"enum": ["srt", "vtt"]
},
"sourceLanguage": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"targetLanguage": {
"type": "string",
"minLength": 2,
"maxLength": 60
},
"requestId": {
"description": "UUID v4 for this action. Reuse the same ID with identical arguments on retries.",
"type": "string",
"format": "uuid",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
}
},
"required": ["subtitleContent", "targetLanguage"],
"additionalProperties": false
}
멱등성
각 변경 작업에 대해 requestId 또는 Idempotency-Key HTTP 헤더에 UUID v4를 사용하세요. 네트워크 오류 후에는 동일한 식별자와 동일한 인수를 재사용하세요. 둘 다 제공하는 경우 값이 일치해야 합니다. 저장된 요청을 재전송해도 작업이 반복되거나 월간 호출이 추가로 차감되지 않습니다. 실패하거나 중단된 요청은 자동으로 다시 시작되지 않습니다. 첫 실행이 일반적으로 동기식인 경우에도, 재시도 시 동일한 요청이 아직 실행 중이면 모든 변경 작업에서 HTTP 202를 반환할 수 있습니다. 실행은 완료되었지만 resultStored가 false이면, 재시도 시 원래 결과 대신 저장된 요청 상태를 HTTP 200으로 반환합니다. 해당 영역의 기록, 결과 또는 다운로드 액션으로 출력을 조회하세요.요청 예제
예제의 리소스 식별자와 미디어 키를 계정에서 반환된 값으로 바꾸세요. 동일한 변경 작업을 재시도할 때는 요청 식별자를 유지하세요.curl --request POST 'https://api.voicecheap.ai/v1/actions/subtitles_translate' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"subtitleContent":"1\n00:00:00,000 --> 00:00:01,500\nHello world.\n","fileName":"interview.srt","format":"srt","sourceLanguage":"english","targetLanguage":"french","requestId":"13579bdf-2468-4ace-8bdf-0123456789ab"}'
const input = {
subtitleContent: '1\n00:00:00,000 --> 00:00:01,500\nHello world.\n',
fileName: 'interview.srt',
format: 'srt',
sourceLanguage: 'english',
targetLanguage: 'french',
requestId: '13579bdf-2468-4ace-8bdf-0123456789ab',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/subtitles_translate', {
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/subtitles_translate",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"subtitleContent": "1\n00:00:00,000 --> 00:00:01,500\nHello world.\n", "fileName": "interview.srt", "format": "srt", "sourceLanguage": "english", "targetLanguage": "french", "requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
응답
이 작업은 실행 중에 HTTP 202를 반환합니다. requestId를 저장하고 해당 식별자와 원래 작업 이름으로 action_request_get을 폴링하세요. 폴링 상태는 running, completed, failed, interrupted입니다. 완료된 결과가 별도의 미디어 작업을 가리킬 수 있으므로 해당 작업의 상태 또는 출력 액션을 이어서 사용하세요. 저장된 자막 번역 참조입니다. 전체 JSON에는 originalContent, translatedContent, 서로 일치하는 sourceFormat/outputFormat, fileName, sourceLanguage, targetLanguage, cueCount 및 characterCount가 포함되며 historyId와 detectedLanguage는 선택 사항입니다.{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"status": "running",
"pollAction": "action_request_get",
"pollAfterSeconds": 5
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "subtitles_translate",
"createdAt": 1792152000000,
"fileName": "voicecheap-subtitles_translate-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 365,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list"
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab"
}
결과 필드
| 필드 | 설명 |
|---|---|
data.resultId | 소유한 저장 출력의 UUID입니다. getAction 또는 downloadAction과 함께 사용하세요. requestId 및 모든 historyId와는 별개입니다. |
data.operation | 이 저장된 JSON을 생성한 생성 액션입니다. |
data.createdAt | 저장된 출력이 준비된 시점의 Unix 타임스탬프(밀리초 단위)입니다. |
data.fileName | JSON 내보내기의 권장 파일명입니다. |
data.byteLength | 요약된 메타데이터가 아닌 직렬화된 전체 출력의 UTF-8 바이트입니다. |
data.contentType | application/json; charset=utf-8. |
data.status | 생성에 성공하면 completed입니다. 결과 기록에는 pending 복구 항목이 표시될 수도 있습니다. |
data.requestId | 기록된 경우 원래 액션 요청의 UUID입니다. |
data.getAction | 본인 소유 결과 조회 액션입니다. includeContent의 기본값은 false이며 전체 구조화된 출력을 받으려면 true여야 합니다. |
data.downloadAction | 전체 JSON을 콘텐츠 문자열로 반환하는 인증된 내보내기 액션입니다. |
data.listAction | 이 권한 영역에서 본인 소유의 저장된 출력 목록을 조회하는 액션입니다. |
이 요청 복구 및 폴링
연결이 끊어진 후에도 동일한 식별자를 사용하세요. resultStored가 false이면 해당 기록, 결과 또는 다운로드 액션을 통해 출력을 조회하세요. 진행 상황을 확인하기 위해 두 번째 생성을 시작하지 마세요.curl --request POST 'https://api.voicecheap.ai/v1/actions/action_request_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"requestId":"13579bdf-2468-4ace-8bdf-0123456789ab","operation":"subtitles_translate"}'
HTTP 200
{
"data": {
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"operation": "subtitles_translate",
"status": "completed",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"resultStored": true,
"result": {
"resultId": "b3caf96f-5f2a-4619-832c-a12c0d57f78b",
"operation": "subtitles_translate",
"createdAt": 1792152000000,
"fileName": "voicecheap-subtitles_translate-b3caf96f-5f2a-4619-832c-a12c0d57f78b.json",
"byteLength": 365,
"contentType": "application/json; charset=utf-8",
"status": "completed",
"requestId": "13579bdf-2468-4ace-8bdf-0123456789ab",
"getAction": "subtitles_result_get",
"downloadAction": "subtitles_result_download",
"listAction": "subtitles_result_list"
}
}
}
작업 참고 사항
- 유료 구독과 해당 액션 권한이 필요합니다. 실행 시 실행 주체의 개인 도구 요금제를 다시 확인합니다. 인증 정보가 팀과 연결되어 있어도 저장된 도구와 업로드 참조는 해당 실행 주체에 속합니다.
- 성공한 액션은 공유 월간 API/MCP 호출 1회를 사용합니다. 월간 호출 허용량은 Beginner 500회, Starter 5,000회, Creator 25,000회이며, Pro, Scale 및 Enterprise에는 월간 상한이 없습니다. 분당 한도는 각각 30, 60, 120, 180, 300 및 600회로 계속 적용됩니다. 도구 생성 허용량은 별도입니다.
- UUID v4 requestId 또는 동일한 Idempotency-Key 헤더를 사용하고, 다시 시도할 때 동일한 액션, ID 및 인수를 유지하세요. 캐시된 결과를 다시 반환할 때는 월간 호출 횟수를 추가로 사용하지 않습니다.
- 이 액션은 비동기 액션입니다. 초기 전송 결과는 pollAction을 포함한 running 상태의 요청입니다. 이 작업과 원래 requestId로 action_request_get을 폴링하세요. 여기에 표시된 완료된 작업 결과는 생성된 본문이 아닌 간결한 저장 출력 참조입니다.
- 전체 출력은 제한된 액션 폴링 캐시와 별개로, 인증된 소유권 아래 암호화된 저장소에 저장됩니다. 구조화된 JSON을 받으려면 반환된 getAction을 resultId 및 includeContent: true와 함께 호출하고, JSON 텍스트를 받으려면 downloadAction을 resultId와 함께 호출하세요. 원래 요청만 알고 있는 경우 listAction이 복구 경로를 제공합니다.
- 저장된 JSON은 32 MiB로 제한됩니다. 메타데이터는 저장소 암호화 키나 인증되지 않은 전사문 다운로드 URL을 절대 노출하지 않습니다.
- 생성에 성공하면 개인 도구 허용량 1회 사용이 확정됩니다. 생성에 실패하면 일반적으로 도구 예약분이 해제됩니다. 출력이 영구 저장되었는지 불확실한 경우 다시 생성하기 전에 동일한 요청과 저장된 결과 기록을 확인하세요. 서버는 중복 사용을 방지하기 위해 예약분을 유지합니다.
- 월간 통합 상한이 없는 상위 플랜에도 아래의 도구별 일일 허용량과 미디어 한도가 적용됩니다. 이 독립형 액션은 더빙 분 수나 TTS 문자 수 대신 해당 도구의 허용량을 사용합니다.
- 최대 2 MiB의 UTF-8 SRT 또는 VTT 텍스트를 제공하세요. format은 srt 또는 vtt이며, 생략하면 콘텐츠나 파일명에서 format을 추론합니다. targetLanguage는 필수이고 sourceLanguage의 기본값은 자동 감지입니다.
- 출력은 원본 자막 구간의 타이밍과 선택한 SRT/VTT 형식을 유지합니다. characterCount는 출력 바이트가 아니라 원본 자막 구간 텍스트의 문자 수를 셉니다. 정규화된 fileName은 바깥쪽의 저장 JSON이 아니라 자막 파일을 나타냅니다.
- 도구별 일일 허용량은 성공한 생성 기준으로 Beginner 5회, Starter 15회, Creator 30회, Pro 60회, Scale 100회 및 Enterprise 100회입니다. 해당 웹 도구와 공유하며 계정 도구의 초기화 기간을 사용합니다.
- 자막 번역 기록 저장은 최선의 노력 방식으로 수행되며 성공이 보장되지는 않습니다. 전체 콘텐츠를 복구하려면 저장된 연동 결과를 사용하세요. 이 액션은 업로드된 원본 미디어를 소모하지 않습니다.
사용량
성공한 호출마다 월간 API/MCP 호출 1회가 차감됩니다. 미디어 크레딧과 해당 작업의 생성 허용량도 적용됩니다.오류
| HTTP 상태 | 코드 | 의미 또는 복구 방법 |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | 자격 증명이 access_token 또는 api_key 쿼리 매개변수로 제공되었습니다. 자격 증명은 헤더로 보내세요. |
| 400 | IDEMPOTENCY_CONFLICT | 헤더와 본문의 요청 ID가 다릅니다. |
| 400 | INVALID_REQUEST_ID | requestId 또는 Idempotency-Key가 UUID v4가 아닙니다. |
| 400 | SUBTITLE_CONTENT_REQUIRED | 자막 콘텐츠에 텍스트가 없습니다. |
| 400 | SUBTITLE_EMPTY | 자막 텍스트가 포함된 큐를 찾을 수 없습니다. |
| 400 | SUBTITLE_FILE_TOO_LARGE | UTF-8 자막 입력이 2 MiB를 초과합니다. |
| 400 | SUBTITLE_INVALID_SRT | SRT 큐 구조가 유효하지 않습니다. |
| 400 | SUBTITLE_INVALID_SRT_TIMESTAMP | SRT 타임스탬프를 파싱할 수 없습니다. |
| 400 | SUBTITLE_INVALID_SRT_TIMING | SRT 큐의 시간 정보가 유효하지 않습니다. |
| 400 | SUBTITLE_INVALID_VTT | VTT 콘텐츠에 유효한 WEBVTT 헤더가 없습니다. |
| 400 | SUBTITLE_INVALID_VTT_TIMESTAMP | VTT 타임스탬프를 파싱할 수 없습니다. |
| 400 | SUBTITLE_INVALID_VTT_TIMING | VTT 타이밍 줄이 유효하지 않습니다. |
| 400 | SUBTITLE_TRANSLATOR_SAME_LANGUAGE | 정규화된 원본 언어와 대상 언어가 같습니다. |
| 400 | SUBTITLE_TRANSLATOR_TARGET_LANGUAGE_REQUIRED | 사용 가능한 대상 언어가 제공되지 않았습니다. |
| 400 | SUBTITLE_UNSUPPORTED_VTT_BLOCK | VTT 파일에 번역기가 보존할 수 없는 블록이 있습니다. |
| 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 | ACCOUNT_UNAVAILABLE | 작업을 수행하는 계정 또는 결제 계정을 사용할 수 없거나 해당 계정이 삭제 중입니다. |
| 403 | AMBIGUOUS_TEAM_API_KEY | 이 자격 증명의 사용자가 둘 이상의 팀에 속해 있어 청구 컨텍스트가 모호합니다. |
| 403 | INSUFFICIENT_SCOPE | API 키 또는 MCP 연결에 필요한 액션 권한이 없습니다. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | 계정의 통합 한도를 확인할 수 없습니다. |
| 403 | PAID_SUBSCRIPTION_REQUIRED | 이 도구 액션이 실행되는 시점에 인증된 요청 주체에게 더 이상 유료 구독이 없습니다. |
| 403 | SUBSCRIPTION_REQUIRED | 활성 유료 구독을 사용하세요. |
| 403 | TEAM_OWNER_NOT_FOUND | 실제로 적용되는 팀 소유자 계정을 찾을 수 없습니다. |
| 409 | CONCURRENT_ACTION_LIMIT_REACHED | 이 계정에서는 이미 10개의 연동 액션이 실행 중입니다. 새 액션을 시작하기 전에 기존 요청을 폴링하세요. |
| 409 | IDEMPOTENCY_CONFLICT | 동일한 작업과 인수에 대해서만 식별자를 재사용하세요. |
| 410 | TOOL_RESULT_ACCOUNT_UNAVAILABLE | 요청 주체의 계정이 삭제 중이거나 더 이상 존재하지 않아 영구 결과를 저장할 수 없습니다. |
| 413 | TOOL_RESULT_TOO_LARGE | 생성된 전체 JSON이 32 MiB를 초과하여 통합 결과로 저장할 수 없습니다. |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | 사용된 호출과 대기 중인 호출이 공유 월간 API/MCP 허용량에 도달했습니다. |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | 계정이 분당 통합 한도에 도달했습니다. retryAfterSeconds를 확인하세요. |
| 429 | SUBTITLE_TRANSLATOR_TOOL_DAILY_LIMIT_REACHED | 요청 주체가 subtitle-translator의 일일 허용량을 모두 사용했습니다. |
| 500 | INTERNAL_ERROR | 변경 작업을 재시도하기로 결정하기 전에 저장된 요청 상태와 리소스 기록을 확인하세요. |
| 502 | INTERNAL_ERROR | 생성 또는 출력 저장에 실패했습니다. 다른 생성을 시작하기 전에 원래 요청과 저장된 결과 이력을 확인하세요. |
| 503 | ACTION_RESULT_UNAVAILABLE | 액션이 실행되었지만 요청 결과의 영구 저장 여부를 확인하지 못했습니다. 다른 쓰기 작업을 시작하기 전에 동일한 액션과 requestId를 폴링하고 리소스 기록을 확인하세요. |
| 503 | INTERNAL_ERROR | 생성 또는 결과 영구 저장의 성패가 불확실하거나 일시적으로 확인할 수 없습니다. 다시 생성하기 전에 인증을 통한 결과 복구를 사용하세요. |
| 503 | SERVER_RESTARTING | 서버가 다시 시작 중입니다. 잠시 후 재시도하고, 변경 작업의 경우 동일한 요청 식별자를 유지하세요. |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["subtitles:write"]
}
}
이 페이지가 도움이 되었나요?

