curl --request POST 'https://api.voicecheap.ai/v1/actions/account_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{}'
const input = {};
const response = await fetch('https://api.voicecheap.ai/v1/actions/account_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/account_get",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"userId": "user_123",
"email": "developer@example.com",
"displayName": "Studio owner",
"companyName": "Studio",
"plan": "pro",
"workspace": {
"ownerUserId": "user_123",
"teamId": null,
"isTeamMember": false
},
"credits": {
"availableMinutes": 150,
"includedMinutes": 120,
"purchasedMinutes": 30,
"textToSpeech": {
"limit": 4000000,
"used": 125000,
"remaining": 3925000,
"includedRemaining": 3875000,
"purchasedRemaining": 50000,
"resetsAt": 1793491200000
}
},
"permissions": {
"scopes": [
"account:read"
],
"canManageOwnTeam": false,
"canEditSharedSettings": true
},
"limits": {
"maxConcurrentTranslations": 5,
"accessToLipSyncPro": false
}
}
}
Konto
Pobierz konto i salda kredytów
Pobierz dane konta, obowiązujący plan, salda minut w ramach planu i zakupionych, saldo znaków do zamiany tekstu na mowę oraz uprawnienia tego połączenia.
POST
/
v1
/
actions
/
account_get
curl --request POST 'https://api.voicecheap.ai/v1/actions/account_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{}'
const input = {};
const response = await fetch('https://api.voicecheap.ai/v1/actions/account_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/account_get",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"userId": "user_123",
"email": "developer@example.com",
"displayName": "Studio owner",
"companyName": "Studio",
"plan": "pro",
"workspace": {
"ownerUserId": "user_123",
"teamId": null,
"isTeamMember": false
},
"credits": {
"availableMinutes": 150,
"includedMinutes": 120,
"purchasedMinutes": 30,
"textToSpeech": {
"limit": 4000000,
"used": 125000,
"remaining": 3925000,
"includedRemaining": 3875000,
"purchasedRemaining": 50000,
"resetsAt": 1793491200000
}
},
"permissions": {
"scopes": [
"account:read"
],
"canManageOwnTeam": false,
"canEditSharedSettings": true
},
"limits": {
"maxConcurrentTranslations": 5,
"accessToLipSyncPro": false
}
}
}
Pobierz dane konta, obowiązujący plan, salda minut w ramach planu i zakupionych, saldo znaków do zamiany tekstu na mowę oraz uprawnienia tego połączenia.
Wymagane uprawnienia:
POST https://api.voicecheap.ai/v1/actions/account_get
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.
account: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
Wyślij pusty obiekt JSON. Ta akcja nie ma pól wejściowych.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": {},
"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/account_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{}'
const input = {};
const response = await fetch('https://api.voicecheap.ai/v1/actions/account_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/account_get",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={},
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 publiczny profil wywołującego, efektywny plan, aktywny obszar roboczy, dostępne kredyty na multimedia, uprawnienia połączenia i limity tłumaczeń.{
"data": {
"userId": "user_123",
"email": "developer@example.com",
"displayName": "Studio owner",
"companyName": "Studio",
"plan": "pro",
"workspace": {
"ownerUserId": "user_123",
"teamId": null,
"isTeamMember": false
},
"credits": {
"availableMinutes": 150,
"includedMinutes": 120,
"purchasedMinutes": 30,
"textToSpeech": {
"limit": 4000000,
"used": 125000,
"remaining": 3925000,
"includedRemaining": 3875000,
"purchasedRemaining": 50000,
"resetsAt": 1793491200000
}
},
"permissions": {
"scopes": [
"account:read"
],
"canManageOwnTeam": false,
"canEditSharedSettings": true
},
"limits": {
"maxConcurrentTranslations": 5,
"accessToLipSyncPro": false
}
}
}
Pola wyniku
| Pole | Opis |
|---|---|
data.userId | Identyfikator uwierzytelnionego konta. |
data.email | Adres e-mail uwierzytelnionego konta. |
data.displayName | Nazwa wyświetlana uwierzytelnionego konta. |
data.companyName | Zapisana nazwa firmy lub null. |
data.plan | Efektywny plan używany przez to połączenie. |
data.workspace.ownerUserId | Konto będące właścicielem projektów i kredytów minutowych w aktywnym obszarze roboczym. |
data.workspace.teamId | Identyfikator aktywnego zespołu lub null dla osobistego obszaru roboczego. |
data.workspace.isTeamMember | Czy to połączenie działa jako członek w obszarze roboczym właściciela zespołu. |
data.credits.availableMinutes | Łączna liczba dostępnych pełnych minut, w tym zakupione kredyty. |
data.credits.includedMinutes | Dostępne pełne minuty z salda zawartego w planie. |
data.credits.purchasedMinutes | Dostępne pełne minuty z zakupionych kredytów minutowych. |
data.credits.textToSpeech.limit | Limit znaków do zamiany tekstu na mowę w ramach planu dla bieżącego okresu limitu. |
data.credits.textToSpeech.used | Znaki do zamiany tekstu na mowę w ramach planu wykorzystane w bieżącym okresie. |
data.credits.textToSpeech.remaining | Dostępne znaki do zamiany tekstu na mowę w ramach planu i zakupione. |
data.credits.textToSpeech.includedRemaining | Dostępne znaki do zamiany tekstu na mowę w ramach planu. |
data.credits.textToSpeech.purchasedRemaining | Dostępne zakupione znaki do zamiany tekstu na mowę. |
data.credits.textToSpeech.resetsAt | Koniec bieżącego okresu limitu zamiany tekstu na mowę w milisekundach lub null, gdy żaden okres nie jest aktywny. |
data.permissions.scopes | Uprawnienia przyznane temu kluczowi API lub połączeniu MCP. |
data.permissions.canManageOwnTeam | Czy uwierzytelnione konto jest już właścicielem zespołu. |
data.permissions.canEditSharedSettings | Czy wywołujący może edytować słownictwo obszaru roboczego i instrukcje tłumaczenia konta. |
data.limits.maxConcurrentTranslations | Obowiązujący limit równoczesnych tłumaczeń. |
data.limits.accessToLipSyncPro | Czy efektywne konto tego połączenia ma dostęp do synchronizacji ruchu ust Pro. |
Uwagi do operacji
- Kredyty minutowe należą do aktywnego osobistego lub zespołowego obszaru roboczego. Historia zamiany tekstu na mowę i kredyty znakowe należą do uwierzytelnionego konta.
- Okresy limitu zamiany tekstu na mowę trwają 30 dni od pierwszego generowania po zakończeniu poprzedniego okresu; ich reset jest niezależny od wywołań integracji rozliczanych według miesiąca kalendarzowego.
- Ta akcja nie zwraca zapisanych kluczy API, sekretów podpisywania webhooków ani danych uwierzytelniających kont zewnętrznych.
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 | Obiekt JSON zawiera nieobsługiwane pole, nieprawidłową wartość lub brakuje w nim wymaganego argumentu. |
| 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_MEMBERSHIP_INVALID | Bieżące członkostwo konta w zespole nie odpowiada obszarowi roboczemu tego połączenia. Odśwież członkostwo i połącz się ponownie. |
| 403 | TEAM_OWNER_NOT_FOUND | Nie znaleziono konta faktycznego właściciela zespołu. |
| 404 | ACCOUNT_NOT_FOUND | Nie znaleziono konta lub konta aktywnego obszaru roboczego. |
| 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": ["account:read"]
}
}
Czy ta strona była pomocna?

