Créer un groupe d'actifs matériels Seedance
curl --request POST \
--url https://api.tokenlab.sh/v1/videos/assets/groups \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Prises de vue de produits réutilisables"
}
'import requests
url = "https://api.tokenlab.sh/v1/videos/assets/groups"
payload = {
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Prises de vue de produits réutilisables"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
library_type: 'aigc_avatar',
group_name: 'Product references',
description: 'Prises de vue de produits réutilisables'
})
};
fetch('https://api.tokenlab.sh/v1/videos/assets/groups', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tokenlab.sh/v1/videos/assets/groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'library_type' => 'aigc_avatar',
'group_name' => 'Product references',
'description' => 'Prises de vue de produits réutilisables'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tokenlab.sh/v1/videos/assets/groups"
payload := strings.NewReader("{\n \"library_type\": \"aigc_avatar\",\n \"group_name\": \"Product references\",\n \"description\": \"Prises de vue de produits réutilisables\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tokenlab.sh/v1/videos/assets/groups")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"library_type\": \"aigc_avatar\",\n \"group_name\": \"Product references\",\n \"description\": \"Prises de vue de produits réutilisables\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tokenlab.sh/v1/videos/assets/groups")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"library_type\": \"aigc_avatar\",\n \"group_name\": \"Product references\",\n \"description\": \"Prises de vue de produits réutilisables\"\n}"
response = http.request(request)
puts response.read_body{
"id": "group-20260720123456-vrt01",
"object": "seedance.material_asset_group",
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Prises de vue de produits réutilisables",
"status": "ACTIVE",
"metadata": null,
"created_at": 1782998400000
}{
"error": {
"message": "model: Model is required",
"type": "invalid_request_error",
"param": "model"
},
"validation_errors": [
{
"field": "model",
"message": "Model is required"
}
]
}{
"error": {
"message": "Invalid API key provided",
"type": "invalid_api_key"
}
}{
"error": {
"message": "<string>",
"type": "unauthorized",
"code": "<string>",
"param": "<string>",
"model": "<string>",
"did_you_mean": "<string>",
"suggestions": [
{
"id": "<string>"
}
],
"alternatives": [
{
"id": "<string>",
"status": "<string>",
"tags": [
"<string>"
]
}
],
"hint": "<string>",
"retry_after": 123,
"retryable": true,
"balance_usd": 123,
"estimated_cost_usd": 123,
"supported_operations": [
"<string>"
],
"supported_parameters": [
"<string>"
],
"required_selectors": [
"<string>"
],
"optional_selectors": [
"<string>"
],
"allowed_resolutions": [
"<string>"
],
"allowed_durations": [
"<string>"
],
"allowed_aspect_ratios": [
"<string>"
],
"prompt_max_characters": 123,
"recommended_request": {},
"request_endpoint": "<string>",
"request_shape_mode": "<string>",
"status_mode": "<string>",
"request_id": "<string>"
}
}{
"error": {
"message": "An internal error occurred",
"type": "server_error"
}
}{
"error": {
"message": "Seedance material library request failed",
"type": "server_error",
"code": "seedance_material_library_request_failed"
}
}Vidéo & ressources
Créer un groupe d'actifs matériels
Crée un groupe de matériel pour avatar virtuel Seedance.
POST
/
v1
/
videos
/
assets
/
groups
Créer un groupe d'actifs matériels Seedance
curl --request POST \
--url https://api.tokenlab.sh/v1/videos/assets/groups \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Prises de vue de produits réutilisables"
}
'import requests
url = "https://api.tokenlab.sh/v1/videos/assets/groups"
payload = {
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Prises de vue de produits réutilisables"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
library_type: 'aigc_avatar',
group_name: 'Product references',
description: 'Prises de vue de produits réutilisables'
})
};
fetch('https://api.tokenlab.sh/v1/videos/assets/groups', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tokenlab.sh/v1/videos/assets/groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'library_type' => 'aigc_avatar',
'group_name' => 'Product references',
'description' => 'Prises de vue de produits réutilisables'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tokenlab.sh/v1/videos/assets/groups"
payload := strings.NewReader("{\n \"library_type\": \"aigc_avatar\",\n \"group_name\": \"Product references\",\n \"description\": \"Prises de vue de produits réutilisables\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tokenlab.sh/v1/videos/assets/groups")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"library_type\": \"aigc_avatar\",\n \"group_name\": \"Product references\",\n \"description\": \"Prises de vue de produits réutilisables\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tokenlab.sh/v1/videos/assets/groups")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"library_type\": \"aigc_avatar\",\n \"group_name\": \"Product references\",\n \"description\": \"Prises de vue de produits réutilisables\"\n}"
response = http.request(request)
puts response.read_body{
"id": "group-20260720123456-vrt01",
"object": "seedance.material_asset_group",
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Prises de vue de produits réutilisables",
"status": "ACTIVE",
"metadata": null,
"created_at": 1782998400000
}{
"error": {
"message": "model: Model is required",
"type": "invalid_request_error",
"param": "model"
},
"validation_errors": [
{
"field": "model",
"message": "Model is required"
}
]
}{
"error": {
"message": "Invalid API key provided",
"type": "invalid_api_key"
}
}{
"error": {
"message": "<string>",
"type": "unauthorized",
"code": "<string>",
"param": "<string>",
"model": "<string>",
"did_you_mean": "<string>",
"suggestions": [
{
"id": "<string>"
}
],
"alternatives": [
{
"id": "<string>",
"status": "<string>",
"tags": [
"<string>"
]
}
],
"hint": "<string>",
"retry_after": 123,
"retryable": true,
"balance_usd": 123,
"estimated_cost_usd": 123,
"supported_operations": [
"<string>"
],
"supported_parameters": [
"<string>"
],
"required_selectors": [
"<string>"
],
"optional_selectors": [
"<string>"
],
"allowed_resolutions": [
"<string>"
],
"allowed_durations": [
"<string>"
],
"allowed_aspect_ratios": [
"<string>"
],
"prompt_max_characters": 123,
"recommended_request": {},
"request_endpoint": "<string>",
"request_shape_mode": "<string>",
"status_mode": "<string>",
"request_id": "<string>"
}
}{
"error": {
"message": "An internal error occurred",
"type": "server_error"
}
}{
"error": {
"message": "Seedance material library request failed",
"type": "server_error",
"code": "seedance_material_library_request_failed"
}
}Créez un groupe de matériel avec
library_type: "aigc_avatar". Utilisez ce endpoint pour les avatars virtuels, les produits, les styles et autres références réutilisables qui ne nécessitent pas de vérification de personne réelle.
Les nouveaux groupes de matériel pour personnes réelles sont créés via la Créer une session de validation visuelle et ne peuvent pas être créés directement avec ce endpoint.
project_name isole les ressources au sein de l’organisation authentifiée. Sa valeur par défaut est default ; utilisez la même valeur, sensible à la casse, pour les groupes et ressources associés. Envoyez-la dans le corps JSON pour POST/PUT et dans les paramètres de requête pour GET/DELETE.
Exemple de requête
curl https://api.tokenlab.sh/v1/videos/assets/groups \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"library_type":"aigc_avatar","group_name":"Product references","description":"Reusable product shots","project_name":"default"}'
Exemple de réponse
{
"id": "group-20260720123456-vrt01",
"object": "seedance.material_asset_group",
"project_name": "default",
"library_type": "aigc_avatar",
"group_name": "Product references",
"description": "Reusable product shots",
"status": "ACTIVE",
"metadata": null,
"created_at": 1782998400000
}
Autorisations
Authentification par clé API. Créez ou gérez vos clés API dans Dashboard > API > API Keys.
Corps
application/json
Nom d'affichage optionnel pour le groupe de matériel.
Required string length:
1 - 128Maximum string length:
500Classe de bibliothèque de matériel. La création directe prend en charge aigc_avatar. Créez des groupes liveness_face via CreateVisualValidateSession suivi de GetVisualValidateResult.
Options disponibles:
aigc_avatar, liveness_face Portée du projet pour le groupe de matériel.
Required string length:
1 - 128Réponse
Groupe d'actifs matériels créé
ID du groupe de matériel TokenLab. Utilisez-le comme group_id lors du téléchargement de matériel.
Options disponibles:
seedance.material_asset_group Options disponibles:
aigc_avatar, liveness_face Portée du projet pour ce groupe de matériel.