curl --request POST 'https://api.voicecheap.ai/v1/actions/projects_list' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"query":"Product","limit":20,"offset":0,"originalLanguage":"fr","targetLanguage":"english","status":"translated","sort":"newestFirst"}'
const input = {
query: 'Product',
limit: 20,
offset: 0,
originalLanguage: 'fr',
targetLanguage: 'english',
status: 'translated',
sort: 'newestFirst',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/projects_list', {
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/projects_list",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"query": "Product", "limit": 20, "offset": 0, "originalLanguage": "fr", "targetLanguage": "english", "status": "translated", "sort": "newestFirst"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"projects": [
{
"projectId": "project_launch_2026",
"projectName": "Product launch",
"originalLanguage": "fr",
"targetLanguages": [
"english"
],
"duration": 75,
"createdAt": 1792152000000,
"progressStep": "done",
"folderId": null
}
],
"offset": 0,
"limit": 20,
"nextOffset": null
}
}
프로젝트
프로젝트 목록 조회 또는 검색
페이지 구분, 이름 검색, 언어 및 상태 필터를 사용하여 접근 가능한 프로젝트 목록을 조회합니다. 팀 게스트는 본인이 생성한 API 프로젝트만 볼 수 있습니다.
POST
/
v1
/
actions
/
projects_list
curl --request POST 'https://api.voicecheap.ai/v1/actions/projects_list' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"query":"Product","limit":20,"offset":0,"originalLanguage":"fr","targetLanguage":"english","status":"translated","sort":"newestFirst"}'
const input = {
query: 'Product',
limit: 20,
offset: 0,
originalLanguage: 'fr',
targetLanguage: 'english',
status: 'translated',
sort: 'newestFirst',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/projects_list', {
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/projects_list",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"query": "Product", "limit": 20, "offset": 0, "originalLanguage": "fr", "targetLanguage": "english", "status": "translated", "sort": "newestFirst"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"projects": [
{
"projectId": "project_launch_2026",
"projectName": "Product launch",
"originalLanguage": "fr",
"targetLanguages": [
"english"
],
"duration": 75,
"createdAt": 1792152000000,
"progressStep": "done",
"folderId": null
}
],
"offset": 0,
"limit": 20,
"nextOffset": null
}
}
페이지 구분, 이름 검색, 언어 및 상태 필터를 사용하여 접근 가능한 프로젝트 목록을 조회합니다. 팀 게스트는 본인이 생성한 API 프로젝트만 볼 수 있습니다.
필요한 권한:
POST https://api.voicecheap.ai/v1/actions/projects_list
인증 및 권한
string
필수
이 헤더에 VoiceCheap API 키를 전달하세요. 동일한 API 키를 사용하는 Authorization: Bearer도 지원합니다. OAuth 액세스 토큰은 MCP에서만 허용되며, 이
REST 엔드포인트에서는 사용할 수 없습니다.
projects:read.
활성 유료 구독이 필요합니다. 권한은 팀 역할, 리소스 소유권, 미디어 크레딧 또는 요금제 한도를 변경하지 않습니다.
매개변수
string
텍스트 값입니다.최소 길이: 1. 최대 길이: 200.
integer
정수 값입니다.최솟값: 0. 최댓값: 100000. 기본값: 0.
integer
정수 값입니다.최솟값: 1. 최댓값: 50. 기본값: 20.
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
텍스트 값입니다.허용값: “af”, “sq”, “am”, “ar”, “hy”, “as”, “ast”, “az”, “ba”, “eu”, “be”, “bn”, “bs”, “br”, “bg”, “my”, “ca”, “ceb”, “zh”, “hr”, “cs”, “da”, “nl”, “en”, “eo”, “at”, “et”, “fil”, “fo”, “fi”, “fr”, “fr-CA”, “fy”, “ff”, “gd”, “gl”, “lg”, “ka”, “de”, “el”, “gu”, “ht”, “ha”, “haw”, “he”, “hi”, “hu”, “is”, “ig”, “ilo”, “id”, “ia”, “ga”, “it”, “ja”, “jv”, “kea”, “kn”, “kk”, “km”, “kur”, “kir”, “ko”, “lo”, “la”, “luo”, “lv”, “lb”, “ln”, “lt”, “mk”, “mg”, “ms”, “ml”, “mt”, “mi”, “mr”, “mo”, “mn”, “ne”, “no”, “nn”, “nso”, “nya”, “oc”, “or”, “pa”, “ps”, “fa”, “pl”, “pt”, “ro”, “ru”, “sa”, “sr”, “sn”, “sd”, “si”, “sk”, “sl”, “so”, “es”, “su”, “sw”, “ss”, “sv”, “tl”, “tg”, “ta”, “tt”, “te”, “th”, “bo”, “tn”, “tr”, “tk”, “ug”, “uk”, “umb”, “ur”, “uz”, “vi”, “cy”, “wo”, “xh”, “yi”, “yo”, “zu”, “cmn”, “yue”, “en-GB”, “en-US”, “en-AU”, “auto-detect”.
string
텍스트 값입니다.허용값: “awaitingProofreading”, “translated”, “failed”.
string
텍스트 값입니다.허용값: “newestFirst”, “oldestFirst”. 기본값: “newestFirst”.
string
텍스트 값입니다.최소 길이: 1. 최대 길이: 200. 패턴:
^[^/\\]+$.전체 입력 스키마
전체 입력 스키마
아래 JSON Schema는 검색을 통해 제공되는 정확한 필드 이름, 중첩 유형, 기본값, 범위 및 허용값을 유지합니다. 추가적인 필드 간 규칙은 작업 참고 사항에 나와 있습니다.
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"offset": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"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"
]
},
"originalLanguage": {
"type": "string",
"enum": [
"af",
"sq",
"am",
"ar",
"hy",
"as",
"ast",
"az",
"ba",
"eu",
"be",
"bn",
"bs",
"br",
"bg",
"my",
"ca",
"ceb",
"zh",
"hr",
"cs",
"da",
"nl",
"en",
"eo",
"at",
"et",
"fil",
"fo",
"fi",
"fr",
"fr-CA",
"fy",
"ff",
"gd",
"gl",
"lg",
"ka",
"de",
"el",
"gu",
"ht",
"ha",
"haw",
"he",
"hi",
"hu",
"is",
"ig",
"ilo",
"id",
"ia",
"ga",
"it",
"ja",
"jv",
"kea",
"kn",
"kk",
"km",
"kur",
"kir",
"ko",
"lo",
"la",
"luo",
"lv",
"lb",
"ln",
"lt",
"mk",
"mg",
"ms",
"ml",
"mt",
"mi",
"mr",
"mo",
"mn",
"ne",
"no",
"nn",
"nso",
"nya",
"oc",
"or",
"pa",
"ps",
"fa",
"pl",
"pt",
"ro",
"ru",
"sa",
"sr",
"sn",
"sd",
"si",
"sk",
"sl",
"so",
"es",
"su",
"sw",
"ss",
"sv",
"tl",
"tg",
"ta",
"tt",
"te",
"th",
"bo",
"tn",
"tr",
"tk",
"ug",
"uk",
"umb",
"ur",
"uz",
"vi",
"cy",
"wo",
"xh",
"yi",
"yo",
"zu",
"cmn",
"yue",
"en-GB",
"en-US",
"en-AU",
"auto-detect"
]
},
"status": {
"type": "string",
"enum": ["awaitingProofreading", "translated", "failed"]
},
"sort": {
"default": "newestFirst",
"type": "string",
"enum": ["newestFirst", "oldestFirst"]
},
"folderId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[^/\\\\]+$"
}
},
"additionalProperties": false
}
요청 예제
예제의 리소스 식별자와 미디어 키를 계정에서 반환된 값으로 바꾸세요. 동일한 변경 작업을 재시도할 때는 요청 식별자를 유지하세요.curl --request POST 'https://api.voicecheap.ai/v1/actions/projects_list' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"query":"Product","limit":20,"offset":0,"originalLanguage":"fr","targetLanguage":"english","status":"translated","sort":"newestFirst"}'
const input = {
query: 'Product',
limit: 20,
offset: 0,
originalLanguage: 'fr',
targetLanguage: 'english',
status: 'translated',
sort: 'newestFirst',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/projects_list', {
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/projects_list",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"query": "Product", "limit": 20, "offset": 0, "originalLanguage": "fr", "targetLanguage": "english", "status": "translated", "sort": "newestFirst"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
응답
성공한 첫 실행은 작업 결과를 data 아래에 포함하여 HTTP 200을 반환합니다. 재전송 시에는 저장된 요청 상태를 대신 반환할 수 있습니다. 예제는 지원되는 응답 중 하나를 보여주며 모든 선택 필드를 포함하지는 않습니다. 접근 가능한 프로젝트 요약 한 페이지와 오프셋 페이지 나누기 메타데이터를 반환합니다.{
"data": {
"projects": [
{
"projectId": "project_launch_2026",
"projectName": "Product launch",
"originalLanguage": "fr",
"targetLanguages": [
"english"
],
"duration": 75,
"createdAt": 1792152000000,
"progressStep": "done",
"folderId": null
}
],
"offset": 0,
"limit": 20,
"nextOffset": null
}
}
결과 필드
| 필드 | 설명 |
|---|---|
data.projects | 공개 프로젝트 요약 페이지입니다. |
data.offset | 요청한 시작 오프셋입니다. |
data.limit | 요청한 페이지 크기입니다. |
data.nextOffset | 가져온 페이지가 가득 차 있으면 offset + limit이며, 그렇지 않으면 null입니다. |
data.projects[].duration | 저장된 길이(초 단위)입니다. |
data.projects[].createdAt | Unix 밀리초로 표시한 프로젝트 생성 시각입니다. |
data.projects[].folderId | 폴더 식별자 또는 null입니다. |
작업 참고 사항
- offset의 기본값은 0, limit는 20(최대 50), sort는 newestFirst입니다. query는 프로젝트 이름으로 검색하며 folderId, 원본 언어, 대상 언어 및 상태는 목록을 필터링합니다.
- 반환되는 프로젝트 필드는 projectId, projectName, originalLanguage, targetLanguages, duration, createdAt, progressStep 및 folderId입니다. 저장되지 않은 선택적 필드는 생략될 수 있습니다. targetLanguages의 기본값은 [], duration은 0, folderId는 null입니다.
- 실제로 가져온 페이지에 limit개의 항목이 있으면 nextOffset이 설정됩니다. 이는 총 개수가 아니며 접근 가능한 다른 결과가 있다는 증거도 아닙니다.
- 팀 게스트는 같은 팀에서 해당 멤버가 API를 통해 생성한 프로젝트만 볼 수 있습니다. 필터링으로 인해 nextOffset이 있어도 projects 배열이 더 짧아질 수 있습니다.
- originalLanguage는 fr 또는 en과 같은 원본 언어 코드(허용되는 경우 auto-detect)를 사용하고, targetLanguage는 english와 같은 지원 대상 언어 이름을 사용합니다.
사용량
성공한 호출마다 월간 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 | INSUFFICIENT_SCOPE | 필요한 모든 권한을 부여하거나 다른 자격 증명을 사용하세요. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | 계정의 통합 한도를 확인할 수 없습니다. |
| 403 | SUBSCRIPTION_REQUIRED | 활성 유료 구독을 사용하세요. |
| 403 | TEAM_OWNER_NOT_FOUND | 실제로 적용되는 팀 소유자 계정을 찾을 수 없습니다. |
| 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": ["projects:read"]
}
}
이 페이지가 도움이 되었나요?

