curl --request POST 'https://api.voicecheap.ai/v1/actions/settings_update' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"requestId":"58d5bb53-00d0-4692-bdaf-c6650ee87e30","brandVocabulary":["VoiceCheap"],"customTranslationInstructions":"Keep product names unchanged.","isSoundNotificationsEnabled":true}'
const input = {
requestId: '58d5bb53-00d0-4692-bdaf-c6650ee87e30',
brandVocabulary: ['VoiceCheap'],
customTranslationInstructions: 'Keep product names unchanged.',
isSoundNotificationsEnabled: true,
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/settings_update', {
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/settings_update",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30", "brandVocabulary": ["VoiceCheap"], "customTranslationInstructions": "Keep product names unchanged.", "isSoundNotificationsEnabled": True},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"updated": true
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
設定と通知
アカウント設定を更新
対応する個人設定を更新します。共有の語彙と翻訳指示を変更できるのはチーム所有者のみです。省略した設定は変更されません。
POST
/
v1
/
actions
/
settings_update
curl --request POST 'https://api.voicecheap.ai/v1/actions/settings_update' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"requestId":"58d5bb53-00d0-4692-bdaf-c6650ee87e30","brandVocabulary":["VoiceCheap"],"customTranslationInstructions":"Keep product names unchanged.","isSoundNotificationsEnabled":true}'
const input = {
requestId: '58d5bb53-00d0-4692-bdaf-c6650ee87e30',
brandVocabulary: ['VoiceCheap'],
customTranslationInstructions: 'Keep product names unchanged.',
isSoundNotificationsEnabled: true,
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/settings_update', {
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/settings_update",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30", "brandVocabulary": ["VoiceCheap"], "customTranslationInstructions": "Keep product names unchanged.", "isSoundNotificationsEnabled": True},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"updated": true
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
対応する個人設定を更新します。共有の語彙と翻訳指示を変更できるのはチーム所有者のみです。省略した設定は変更されません。
必要な権限:
POST https://api.voicecheap.ai/v1/actions/settings_update
認証と権限
string
必須
このヘッダーに VoiceCheap API キーを指定してください。同じ API キーを Authorization: Bearer で送信することもできます。OAuth アクセストークンは MCP
でのみ使用でき、この REST エンドポイントでは使用できません。
settings:write.
有効な有料サブスクリプションが必要です。権限によってチーム内のロール、リソースの所有権、メディアクレジット、プランの制限が変わることはありません。
パラメーター
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}$.string
テキスト値。最小文字数: 1. 最大文字数: 120.
array
値のリスト。要素の構造は完全な入力スキーマを参照してください。最大要素数: 1000.
string
テキスト値。最大文字数: 500.
union
完全な入力スキーマに記載された選択肢を受け付けます。
array
値のリスト。要素の構造は完全な入力スキーマを参照してください。最大要素数: 50.
array
値のリスト。要素の構造は完全な入力スキーマを参照してください。最大要素数: 50.
array
値のリスト。要素の構造は完全な入力スキーマを参照してください。最大要素数: 10.
object
JSON オブジェクト。ネストされたフィールドは完全な入力スキーマを参照してください。
boolean
真偽値。
boolean
真偽値。
完全な入力スキーマ
完全な入力スキーマ
以下の JSON Schema は、ディスカバリーで公開される正確なフィールド名、ネストされた型、デフォルト値、範囲、許容値を保持しています。フィールド間の追加ルールは操作の注意事項に記載されています。
{
"type": "object",
"properties": {
"requestId": {
"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}$",
"description": "UUID v4 for this action. Reuse the same ID with identical arguments on retries."
},
"companyName": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"brandVocabulary": {
"maxItems": 1000,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
}
},
"customTranslationInstructions": {
"type": "string",
"maxLength": 500
},
"favoriteTemplates": {
"anyOf": [
{
"type": "object",
"properties": {
"dynamicSubtitles": {
"anyOf": [
{
"type": "string",
"enum": [
"Sara",
"Daniel",
"Dan 2",
"Hormozi 4",
"Dan",
"Devin",
"Tayo",
"Ella",
"Tracy",
"Luke",
"Hormozi 1",
"Hormozi 2",
"Hormozi 3",
"Hormozi 5",
"Leon",
"Ali",
"Beast",
"Maya",
"Karl",
"Iman",
"Umi",
"David",
"Noah",
"Gstaad",
"Malta",
"Nema",
"Seth",
"William"
]
},
{
"type": "null"
}
]
},
"voiceIds": {
"anyOf": [
{
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"targetLanguagePresets": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"languages": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 2,
"maxLength": 64
}
}
},
"required": ["id", "name", "languages"],
"additionalProperties": false
}
},
"socialMediaStatsPresets": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"channelIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[^/]+$"
}
}
},
"required": ["id", "name", "channelIds"],
"additionalProperties": false
}
},
"textToSpeechBrandPresets": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"voice": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"instructionPreset": {
"type": "string",
"enum": ["default", "cheerful", "calm", "narrator", "dramatic", "whisper", "energetic"]
},
"instructions": {
"type": "string",
"maxLength": 300
},
"speed": {
"type": "number",
"minimum": 0.5,
"maximum": 2
}
},
"required": ["id", "name", "voice", "instructionPreset", "instructions", "speed"],
"additionalProperties": false
}
},
"defaultVoiceCloningSettings": {
"type": "object",
"properties": {
"stability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"similarity": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": ["stability", "similarity"],
"additionalProperties": false
},
"isSoundNotificationsEnabled": {
"type": "boolean"
},
"isVoiceCloningSettingsTipDismissed": {
"type": "boolean"
}
},
"additionalProperties": false
}
冪等性
変更操作ごとに、requestId または Idempotency-Key HTTP ヘッダーに UUID v4 を指定してください。ネットワーク障害後の再試行では、同じ識別子と同一の引数を使用します。両方を指定する場合は一致させる必要があります。保存済みリクエストを再取得しても、操作は再実行されず、月間呼び出し回数も追加で消費されません。失敗または中断したリクエストは自動的には再開されません。 すべての変更操作は、再試行時に同じリクエストがまだ実行中であれば、通常の初回実行が同期処理であっても HTTP 202 を返す場合があります。実行が完了していても resultStored が false の場合、再試行では元の結果ではなく、保存済みリクエストの状態を HTTP 200 で返します。出力は対応するドメインの履歴、結果、またはダウンロードアクションで取得してください。リクエスト例
例に記載されたリソース識別子とメディアキーを、ご自身のアカウントで返された値に置き換えてください。同じ変更操作を再試行する場合は、リクエスト識別子を変更しないでください。curl --request POST 'https://api.voicecheap.ai/v1/actions/settings_update' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"requestId":"58d5bb53-00d0-4692-bdaf-c6650ee87e30","brandVocabulary":["VoiceCheap"],"customTranslationInstructions":"Keep product names unchanged.","isSoundNotificationsEnabled":true}'
const input = {
requestId: '58d5bb53-00d0-4692-bdaf-c6650ee87e30',
brandVocabulary: ['VoiceCheap'],
customTranslationInstructions: 'Keep product names unchanged.',
isSoundNotificationsEnabled: true,
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/settings_update', {
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/settings_update",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30", "brandVocabulary": ["VoiceCheap"], "customTranslationInstructions": "Keep product names unchanged.", "isSoundNotificationsEnabled": True},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
レスポンス
初回実行が成功すると、操作結果を data に格納して HTTP 200 を返します。同じリクエストを再送した場合は、代わりに保存済みリクエストの状態を返すことがあります。例はサポートされるレスポンスの一例であり、すべての任意フィールドを示すものではありません。 指定された対応済み設定が保存されたことを確認します。{
"data": {
"updated": true
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30"
}
結果フィールド
| フィールド | 説明 |
|---|---|
data.updated | 設定の更新が完了すると true。 |
リクエストの復旧とポーリング
接続が切断された後も同じ識別子を使用してください。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":"58d5bb53-00d0-4692-bdaf-c6650ee87e30","operation":"settings_update"}'
HTTP 200
{
"data": {
"requestId": "58d5bb53-00d0-4692-bdaf-c6650ee87e30",
"operation": "settings_update",
"status": "completed",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"resultStored": true,
"result": {
"updated": true
}
}
}
操作の注意事項
- 任意の requestId に加えて、少なくとも1つの設定を指定してください。省略した設定は変更されません。
- brandVocabulary と customTranslationInstructions を変更できるのはチームオーナーのみです。チームメンバーは、それ以外の自分の設定を更新できます。
- 語彙には最大 1,000 用語を指定できます。正規化後の各用語は 49 文字以内かつ5単語以内で、角括弧、波括弧、山括弧、バックスラッシュは使用できません。大文字・小文字を区別せず、重複する用語を除去します。
- 会社名は1–120文字です。アカウントの翻訳指示は最大500文字です。
- 言語とチャネルのプリセットは最大50件で、それぞれ1–50個の言語またはチャネルを選択できます。TTSのブランドプリセットは、一意のIDが最大10件、名前が60文字、指示が300文字、speed が0.5から2までです。
使用量
正常に実行された呼び出しごとに、月間 API/MCP 呼び出し回数を 1 回消費します。メディアクレジットと、その操作固有の生成枠も適用されます。エラー
| HTTP ステータス | コード | 意味または対処方法 |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | access_token または api_key クエリパラメーターに認証情報が指定されています。認証情報はヘッダーで送信してください。 |
| 400 | IDEMPOTENCY_CONFLICT | Idempotency-Key ヘッダーとリクエストボディの requestId は一致させる必要があります。 |
| 400 | INVALID_BRAND_VOCABULARY | 1 つ以上の語彙の用語が、用語の長さ、単語数、使用文字のルールに違反しています。 |
| 400 | INVALID_REQUEST_ID | UUID v4 の requestId または Idempotency-Key を指定してください。 |
| 400 | VALIDATION_ERROR | JSONオブジェクトに未対応のフィールド、無効な値、または必須引数の欠落があります。 |
| 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 | 必要な権限をすべて付与するか、別の認証情報を使用してください。 |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | アカウントの連携上限を確認できませんでした。 |
| 403 | PAID_SUBSCRIPTION_REQUIRED | TTS 音声プリセットの新規保存や変更の保存には、有効な有料サブスクリプションが必要です。 |
| 403 | SUBSCRIPTION_REQUIRED | 有効な有料サブスクリプションを使用してください。 |
| 403 | TEAM_OWNER_NOT_FOUND | 実効的なチームオーナーのアカウントが見つかりませんでした。 |
| 403 | TEAM_OWNER_REQUIRED | このアクションには、チームまたは共有設定を所有するアカウントが必要です。 |
| 404 | ACCOUNT_NOT_FOUND | アカウントまたはアクティブなワークスペースのアカウントが見つかりませんでした。 |
| 409 | CONCURRENT_ACTION_LIMIT_REACHED | このアカウントでは、すでに 10 件の連携アクションが実行中です。新しいアクションを開始する前に、既存のリクエストをポーリングしてください。 |
| 409 | IDEMPOTENCY_CONFLICT | 識別子を再利用する場合は、同じ操作と引数でのみ使用してください。 |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | 月次リセットを待つか、プランを変更してください。 |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Retry-After がある場合は指定時間を待ち、バックオフを使用してください。 |
| 500 | INTERNAL_ERROR | 変更操作を再試行するか判断する前に、保存済みリクエストの状態とリソースの履歴を確認してください。 |
| 503 | ACTION_RESULT_UNAVAILABLE | アクションは実行されましたが、結果を保存できませんでした。新しい生成を開始する前に、保存済みリクエストの状態とリソース履歴を確認してください。 |
| 503 | SERVER_RESTARTING | サーバーが再起動中です。少し待ってから再試行し、変更操作では同じリクエスト識別子を使用してください。 |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["settings:write"]
}
}
このページは役に立ちましたか?

