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
}
}
Projekty
Wyświetl lub wyszukaj projekty
Wyświetl dostępne projekty z paginacją, wyszukiwaniem po nazwie i filtrami języka oraz stanu. Gość zespołu widzi tylko projekty API, które sam utworzył.
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
}
}
Wyświetl dostępne projekty z paginacją, wyszukiwaniem po nazwie i filtrami języka oraz stanu. Gość zespołu widzi tylko projekty API, które sam utworzył.
Wymagane uprawnienia:
POST https://api.voicecheap.ai/v1/actions/projects_list
Uwierzytelnianie i uprawnienia
string
wymagane
Wyślij klucz API VoiceCheap w tym nagłówku. Obsługiwany jest również nagłówek Authorization: Bearer z tym samym kluczem API. Tokeny dostępu OAuth są
akceptowane tylko przez MCP, a nie przez ten endpoint REST.
projects:read.
Wymagana jest aktywna płatna subskrypcja. Uprawnienia nie zmieniają ról w zespole, własności zasobów, kredytów na multimedia ani limitów planu.
Parametry
string
Wartość tekstowa.Minimalna długość: 1. Maksymalna długość: 200.
integer
Liczba całkowita.Minimum: 0. Maksimum: 100000. Wartość domyślna: 0.
integer
Liczba całkowita.Minimum: 1. Maksimum: 50. Wartość domyślna: 20.
string
Wartość tekstowa.Dozwolone wartości: “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
Wartość tekstowa.Dozwolone wartości: “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
Wartość tekstowa.Dozwolone wartości: “awaitingProofreading”, “translated”, “failed”.
string
Wartość tekstowa.Dozwolone wartości: “newestFirst”, “oldestFirst”. Wartość domyślna: “newestFirst”.
string
Wartość tekstowa.Minimalna długość: 1. Maksymalna długość: 200. Wzorzec:
^[^/\\]+$.Pełny schemat danych wejściowych
Pełny schemat danych wejściowych
Poniższy JSON Schema zachowuje dokładne nazwy pól, typy zagnieżdżone, wartości domyślne, ograniczenia i akceptowane wartości udostępniane przez mechanizm wykrywania. Dodatkowe reguły zależności między polami znajdują się w uwagach do operacji.
{
"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
}
Przykłady żądań
Zastąp przykładowe identyfikatory zasobów i klucze multimediów wartościami zwróconymi dla Twojego konta. Przy ponawianiu tej samej operacji zmieniającej dane zachowaj identyfikator żądania.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)
Odpowiedź
Pierwsze pomyślne wykonanie zwraca HTTP 200 z wynikiem operacji w data. Ponowienie może zamiast tego zwrócić zapisany stan żądania. Przykład przedstawia jedną obsługiwaną odpowiedź, bez wszystkich opcjonalnych pól. Zwraca stronę podsumowań dostępnych projektów i metadane paginacji z przesunięciem.{
"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
}
}
Pola wyniku
| Pole | Opis |
|---|---|
data.projects | Strona publicznych podsumowań projektów. |
data.offset | Żądane przesunięcie początkowe. |
data.limit | Żądany rozmiar strony. |
data.nextOffset | offset + limit, gdy pobrana strona jest pełna; w przeciwnym razie null. |
data.projects[].duration | Zapisany czas trwania w sekundach. |
data.projects[].createdAt | Czas utworzenia projektu w milisekundach czasu Unix. |
data.projects[].folderId | Identyfikator folderu lub null. |
Uwagi do operacji
- offset ma domyślną wartość 0, limit ma wartość 20 (maksymalnie 50), a sort ma wartość newestFirst. query wyszukuje po nazwie projektu; folderId, język źródłowy, język docelowy i status filtrują listę.
- Zwracane pola projektu to projectId, projectName, originalLanguage, targetLanguages, duration, createdAt, progressStep i folderId. Opcjonalne niezapisane pola mogą zostać pominięte; targetLanguages ma domyślnie wartość [], duration — 0, a folderId — null.
- nextOffset jest ustawiane, gdy pobrana strona źródłowa zawiera limit elementów; nie jest to łączna liczba ani dowód na istnienie kolejnego dostępnego wyniku.
- Goście zespołu widzą tylko projekty utworzone przez API przez tego samego członka w tym samym zespole. Filtrowanie może skrócić tablicę projects nawet wtedy, gdy występuje nextOffset.
- originalLanguage używa kodów języka źródłowego, takich jak fr lub en (lub auto-detect tam, gdzie jest akceptowane); targetLanguage używa obsługiwanych nazw języka docelowego, takich jak english.
Wykorzystanie
Każde pomyślne wywołanie zużywa jedno wywołanie z miesięcznego limitu API/MCP. Obowiązują również kredyty na multimedia oraz limity generowania danej operacji.Błędy
| Status HTTP | Kod | Znaczenie lub sposób rozwiązania |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | Dane uwierzytelniające zostały podane w parametrze zapytania access_token lub api_key. Wysyłaj dane uwierzytelniające w nagłówkach. |
| 400 | VALIDATION_ERROR | Popraw dane wejściowe zgodnie ze schematem. Nieprawidłowe lub niespójne wartości są odrzucane przed wykonaniem. |
| 401 | API_KEY_EXPIRED | Klucz API wygasł. |
| 401 | INVALID_API_KEY | Podaj prawidłowy, niewygasły klucz API. |
| 401 | INVALID_CREDENTIAL | Nagłówek Authorization ma nieprawidłowy format lub jest sprzeczny z x-api-key. |
| 401 | MISSING_CREDENTIAL | Nie podano użytecznych danych uwierzytelniających w nagłówku lub przekroczyły one 4096 znaków. |
| 401 | USER_NOT_FOUND | Konto powiązane z poświadczeniem już nie istnieje. |
| 403 | AMBIGUOUS_TEAM_API_KEY | Użytkownik, do którego należą dane uwierzytelniające, należy do więcej niż jednego zespołu, więc kontekst rozliczeniowy jest niejednoznaczny. |
| 403 | INSUFFICIENT_SCOPE | Nadaj wszystkie wymagane uprawnienia lub wybierz inne dane uwierzytelniające. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | Nie udało się zweryfikować limitów integracji konta. |
| 403 | SUBSCRIPTION_REQUIRED | Użyj aktywnej płatnej subskrypcji. |
| 403 | TEAM_OWNER_NOT_FOUND | Nie znaleziono konta faktycznego właściciela zespołu. |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | Poczekaj na odnowienie miesięcznego limitu lub zmień plan. |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Jeśli występuje nagłówek Retry-After, odczekaj wskazany czas i stosuj rosnące odstępy między ponowieniami. |
| 500 | INTERNAL_ERROR | Sprawdź stan zapisanego żądania i historię zasobu przed podjęciem decyzji o ponowieniu operacji zmieniającej dane. |
| 503 | SERVER_RESTARTING | Serwer jest uruchamiany ponownie. Spróbuj ponownie wkrótce i zachowaj ten sam identyfikator żądania dla operacji zmieniającej dane. |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["projects:read"]
}
}
Czy ta strona była pomocna?

