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
}
}
}
Conta
Consultar conta e saldos de créditos
Consulte a identidade da sua conta, o plano efetivo, os saldos de minutos incluídos e comprados, o saldo de caracteres de conversão de texto em fala e as permissões desta conexão.
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
}
}
}
Consulte a identidade da sua conta, o plano efetivo, os saldos de minutos incluídos e comprados, o saldo de caracteres de conversão de texto em fala e as permissões desta conexão.
Permissões necessárias:
POST https://api.voicecheap.ai/v1/actions/account_get
Autenticação e permissões
string
obrigatório
Envie uma chave de API VoiceCheap neste cabeçalho. Authorization: Bearer com a mesma chave de API também é aceito. Tokens de acesso OAuth são
aceitos apenas pelo MCP, não por este endpoint REST.
account:read.
É necessária uma assinatura paga ativa. As permissões não alteram funções na equipe, propriedade dos recursos, créditos de mídia ou limites do plano.
Parâmetros
Envie um objeto JSON vazio. Esta ação não possui campos de entrada.Esquema de entrada completo
Esquema de entrada completo
O JSON Schema abaixo preserva os nomes exatos dos campos, tipos aninhados, valores padrão, limites e valores aceitos expostos pela descoberta. Regras adicionais entre campos são listadas nas notas da operação.
{
"type": "object",
"properties": {},
"additionalProperties": false
}
Exemplos de requisição
Substitua os identificadores de recursos e as chaves de mídia dos exemplos pelos valores retornados para sua conta. Mantenha o identificador da requisição ao tentar novamente a mesma alteração.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)
Resposta
Uma primeira execução bem-sucedida retorna HTTP 200 com o resultado da operação em data. Uma repetição pode retornar o estado salvo da requisição. O exemplo mostra uma resposta aceita, não todos os campos opcionais. Retorna o perfil público do chamador, o plano efetivo, o espaço de trabalho ativo, os créditos de mídia disponíveis, as permissões da conexão e os limites de tradução.{
"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
}
}
}
Campos do resultado
| Campo | Descrição |
|---|---|
data.userId | Identificador da conta autenticada. |
data.email | Endereço de e-mail da conta autenticada. |
data.displayName | Nome de exibição da conta autenticada. |
data.companyName | Nome da empresa salvo, ou null. |
data.plan | Plano efetivo usado por esta conexão. |
data.workspace.ownerUserId | Conta proprietária dos projetos e dos créditos de minutos no espaço de trabalho ativo. |
data.workspace.teamId | Identificador da equipe ativa, ou null para um espaço de trabalho pessoal. |
data.workspace.isTeamMember | Indica se esta conexão atua como membro no espaço de trabalho do proprietário de uma equipe. |
data.credits.availableMinutes | Total de minutos inteiros disponíveis, incluindo créditos comprados. |
data.credits.includedMinutes | Minutos inteiros disponíveis no saldo incluído. |
data.credits.purchasedMinutes | Minutos inteiros disponíveis dos créditos de minutos comprados. |
data.credits.textToSpeech.limit | Cota incluída de caracteres de conversão de texto em fala para o período atual. |
data.credits.textToSpeech.used | Caracteres incluídos de conversão de texto em fala usados no período atual. |
data.credits.textToSpeech.remaining | Caracteres de conversão de texto em fala incluídos e comprados disponíveis. |
data.credits.textToSpeech.includedRemaining | Caracteres incluídos disponíveis de conversão de texto em fala. |
data.credits.textToSpeech.purchasedRemaining | Caracteres comprados disponíveis de conversão de texto em fala. |
data.credits.textToSpeech.resetsAt | Fim do período atual da cota de conversão de texto em fala em milissegundos ou null quando nenhum período está ativo. |
data.permissions.scopes | Permissões concedidas a esta chave de API ou conexão MCP. |
data.permissions.canManageOwnTeam | Indica se a conta autenticada já é proprietária de uma equipe. |
data.permissions.canEditSharedSettings | Indica se o chamador pode editar o vocabulário do espaço de trabalho e as instruções de tradução da conta. |
data.limits.maxConcurrentTranslations | Cota efetiva de traduções simultâneas. |
data.limits.accessToLipSyncPro | Indica se a conta efetiva desta conexão tem acesso à sincronização labial Pro. |
Notas da operação
- Os créditos de minutos pertencem ao espaço de trabalho pessoal ou de equipe ativo. O histórico de conversão de texto em fala e os créditos de caracteres pertencem à conta autenticada.
- Os períodos da cota de conversão de texto em fala duram 30 dias a partir da primeira geração após o fim do período anterior; a renovação independe das chamadas de integração por mês do calendário.
- Esta ação não retorna chaves de API salvas, segredos de assinatura de webhook ou credenciais de contas externas.
Uso
Cada chamada bem-sucedida consome uma chamada mensal da API/MCP. Os créditos de mídia e as cotas de geração da própria operação também se aplicam.Erros
| Status HTTP | Código | Significado ou recuperação |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | Foram fornecidas credenciais em um parâmetro de consulta access_token ou api_key. Envie as credenciais nos cabeçalhos. |
| 400 | VALIDATION_ERROR | O objeto JSON contém um campo não compatível, um valor inválido ou um argumento obrigatório ausente. |
| 401 | API_KEY_EXPIRED | A chave de API expirou. |
| 401 | INVALID_API_KEY | Forneça uma chave de API válida e dentro do prazo de validade. |
| 401 | INVALID_CREDENTIAL | O cabeçalho Authorization está malformado ou entra em conflito com x-api-key. |
| 401 | MISSING_CREDENTIAL | Nenhuma credencial utilizável foi fornecida no cabeçalho, ou ela excedeu 4096 caracteres. |
| 401 | USER_NOT_FOUND | A conta da credencial não existe mais. |
| 403 | AMBIGUOUS_TEAM_API_KEY | O usuário da credencial pertence a mais de uma equipe, portanto o contexto de cobrança é ambíguo. |
| 403 | INSUFFICIENT_SCOPE | Conceda todas as permissões necessárias ou escolha outra credencial. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | Não foi possível verificar os limites de integração da conta. |
| 403 | SUBSCRIPTION_REQUIRED | Use uma assinatura paga ativa. |
| 403 | TEAM_MEMBERSHIP_INVALID | O vínculo atual da conta com a equipe não corresponde ao espaço de trabalho desta conexão. Atualize o vínculo de membro e reconecte. |
| 403 | TEAM_OWNER_NOT_FOUND | Não foi possível encontrar a conta efetiva do proprietário da equipe. |
| 404 | ACCOUNT_NOT_FOUND | Não foi possível encontrar a conta ou a conta do espaço de trabalho ativo. |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | Aguarde a renovação do limite mensal ou mude de plano. |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Aguarde o prazo de Retry-After, quando presente, e aumente progressivamente o intervalo entre as tentativas. |
| 500 | INTERNAL_ERROR | Verifique o estado da requisição salva e o histórico do recurso antes de decidir repetir uma alteração. |
| 503 | SERVER_RESTARTING | O servidor está reiniciando. Tente novamente em breve e mantenha o mesmo identificador de requisição para uma alteração. |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["account:read"]
}
}
Esta página foi útil?

