curl --request POST \
--url https://api.apimart.ai/v1/seedance2/private-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}'
curl --request POST \
--url https://api.apimart.ai/v1/seedance2/private-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"group_id": "group_xxx",
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
}
]
}'
import requests
url = "https://api.apimart.ai/v1/seedance2/private-avatar"
payload = {
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/seedance2/private-avatar";
const payload = {
group: {
name: "virtual-avatar-group",
description: "demo group"
},
project_name: "default",
asset_type: "Image",
assets: [
{
url: "https://example.com/avatar-a.png",
name: "avatar-a"
},
{
url: "https://example.com/avatar-b.png",
name: "avatar-b"
}
]
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
{
"code": 200,
"data": {
"id": "task_01K...",
"object": "seedance.avatar.asset.task",
"status": "processing",
"progress": 10,
"model": "doubao-seedance-2.0"
}
}
{
"error": {
"code": 400,
"message": "リクエストパラメータが無効です",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "認証に失敗しました。APIキーをご確認ください。",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "残高不足です。チャージしてから再試行してください。",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "リクエストが多すぎます。しばらくしてから再試行してください。",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "サーバー内部エラーが発生しました。しばらくしてから再試行してください。",
"type": "server_error"
}
}
doubao-seedance-2-0
仮想アバターアセット
- プライベートドメイン仮想アバターアセット送信 API
- バッチ送信対応、1 回のリクエストで最大 20 件
- アセットグループの自動作成または再利用、タスク ID を返してステータス確認が可能
- 審査通過済みアセットは Seedance 2.0 の動画生成で直接利用可能
POST
/
v1
/
seedance2
/
private-avatar
curl --request POST \
--url https://api.apimart.ai/v1/seedance2/private-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}'
curl --request POST \
--url https://api.apimart.ai/v1/seedance2/private-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"group_id": "group_xxx",
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
}
]
}'
import requests
url = "https://api.apimart.ai/v1/seedance2/private-avatar"
payload = {
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/seedance2/private-avatar";
const payload = {
group: {
name: "virtual-avatar-group",
description: "demo group"
},
project_name: "default",
asset_type: "Image",
assets: [
{
url: "https://example.com/avatar-a.png",
name: "avatar-a"
},
{
url: "https://example.com/avatar-b.png",
name: "avatar-b"
}
]
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
{
"code": 200,
"data": {
"id": "task_01K...",
"object": "seedance.avatar.asset.task",
"status": "processing",
"progress": 10,
"model": "doubao-seedance-2.0"
}
}
{
"error": {
"code": 400,
"message": "リクエストパラメータが無効です",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "認証に失敗しました。APIキーをご確認ください。",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "残高不足です。チャージしてから再試行してください。",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "リクエストが多すぎます。しばらくしてから再試行してください。",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "サーバー内部エラーが発生しました。しばらくしてから再試行してください。",
"type": "server_error"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/seedance2/private-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}'
curl --request POST \
--url https://api.apimart.ai/v1/seedance2/private-avatar \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"group_id": "group_xxx",
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
}
]
}'
import requests
url = "https://api.apimart.ai/v1/seedance2/private-avatar"
payload = {
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/seedance2/private-avatar";
const payload = {
group: {
name: "virtual-avatar-group",
description: "demo group"
},
project_name: "default",
asset_type: "Image",
assets: [
{
url: "https://example.com/avatar-a.png",
name: "avatar-a"
},
{
url: "https://example.com/avatar-b.png",
name: "avatar-b"
}
]
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
{
"code": 200,
"data": {
"id": "task_01K...",
"object": "seedance.avatar.asset.task",
"status": "processing",
"progress": 10,
"model": "doubao-seedance-2.0"
}
}
{
"error": {
"code": 400,
"message": "リクエストパラメータが無効です",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "認証に失敗しました。APIキーをご確認ください。",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "残高不足です。チャージしてから再試行してください。",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "リクエストが多すぎます。しばらくしてから再試行してください。",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "サーバー内部エラーが発生しました。しばらくしてから再試行してください。",
"type": "server_error"
}
}
認証
string
必須
すべてのリクエストに Bearer Token 認証が必要ですAPI Key の取得:API Key 管理ページ にアクセスして API Key を取得してください各リクエストに以下のヘッダーを追加してください:
Authorization: Bearer YOUR_API_KEY
リクエストパラメータ
object
string
既存アセットグループ ID指定した場合はグループ作成をスキップし、そのグループに直接アセットを送信します
group と同時に指定することはできません。どちらか一方を使用してくださいstring
デフォルト:"default"
プロジェクト名デフォルト:
defaultstring
デフォルト:"Image"
アセットタイプ選択肢:
Image- 画像アセット(デフォルト)Video- 動画アセットAudio- 音声アセット
Imagearray
string
単一アセット互換記法:アセット URL
assets 配列とどちらか一方のみ使用可能。単一アセットの送信に適していますstring
単一アセット互換記法:アセット名
assets 配列とどちらか一方のみ使用可能。単一アセットの送信に適していますレスポンス
integer
レスポンスステータスコード。成功時は 200
object
使用例
例 1:バッチ送信(グループ自動作成)
group_id を指定しない場合、サーバーが AIGC タイプのアセットグループを自動作成してから送信します。
{
"group": {
"name": "virtual-avatar-group",
"description": "demo group"
},
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
},
{
"url": "https://example.com/avatar-b.png",
"name": "avatar-b"
}
]
}
例 2:既存グループへのアセット追加
group_id を指定することでグループ作成をスキップして直接送信します。
{
"group_id": "group_xxx",
"project_name": "default",
"asset_type": "Image",
"assets": [
{
"url": "https://example.com/avatar-a.png",
"name": "avatar-a"
}
]
}
例 3:単一アセット互換記法
アセットが 1 件のみの場合、トップレベルのurl と name フィールドを直接使用できます。
{
"group_id": "group_xxx",
"url": "https://example.com/avatar.png",
"asset_type": "Image",
"name": "avatar-1"
}
審査結果の確認
アセット送信後は非同期審査タスクになります。タスク状態の取得 エンドポイントで進捗を確認してください:GET /v1/tasks/{id}
全件承認
{
"code": 200,
"data": {
"id": "task_01K...",
"status": "completed",
"progress": 100,
"result": {
"assets": [
{
"asset_id": "asset_a",
"asset_url": "asset://asset_a",
"status": "Active"
},
{
"asset_id": "asset_b",
"asset_url": "asset://asset_b",
"status": "Active"
}
],
"usable_assets": [
{
"asset_id": "asset_a",
"asset_url": "asset://asset_a",
"status": "Active"
},
{
"asset_id": "asset_b",
"asset_url": "asset://asset_b",
"status": "Active"
}
],
"failed_assets": []
}
}
}
一部失敗
バッチ送信で 1 件でも審査に失敗した場合、タスク状態はfailed になります。承認済みアセットは引き続き使用可能で、result.usable_assets に表示されます。
{
"code": 200,
"data": {
"id": "task_01K...",
"status": "failed",
"progress": 100,
"result": {
"assets": [
{
"asset_id": "asset_a",
"asset_url": "asset://asset_a",
"status": "Active"
},
{
"asset_id": "asset_b",
"asset_url": "asset://asset_b",
"status": "Failed"
}
],
"usable_assets": [
{
"asset_id": "asset_a",
"asset_url": "asset://asset_a",
"status": "Active"
}
],
"failed_assets": [
{
"asset_id": "asset_b",
"asset_url": "asset://asset_b",
"status": "Failed"
}
]
},
"error": {
"code": "task_failed",
"message": "一部のアセットの審査に失敗しました"
}
}
}
result.usable_assets[].asset_urlは Seedance 2.0 の動画生成で直接使用できますresult.failed_assets内のアセットはソースファイルを差し替えるか再送信が必要です- 単一アセットのタスクでも互換として
result.asset_urlが返されます
審査済みアセットの使用
asset://... URL を Seedance 2.0 動画生成 エンドポイントに直接渡してください:
{
"model": "doubao-seedance-2.0",
"prompt": "キャラクターが都市の街路を自然に歩く",
"image_urls": ["asset://asset_a"],
"duration": 5,
"resolution": "720p"
}
サーバーが
asset:// プレフィックスを検出すると、アセット審査を再度トリガーせず、直接生成タスクを送信します。⌘I