Guide
Ressources
Soumettre des ressources image, interroger le statut de validation et interroger la liste des ressources
Ressources
Après leur soumission, les ressources sont traitées de manière asynchrone par la plateforme ; ce n'est qu'après le passage du statut de Processing à Active qu'elles peuvent être utilisées pour les tâches vidéo.
Soumettre une ressource image
/api/v1/materials/assetsMéthode d'authentification
Authorization: Bearer <API_KEY>.
Corps de la requête · application/json
Prop
Type
Seul l'un des champs image_url et data_url peut être soumis. image_url peut aussi être data:image/...;base64,..., que la plateforme traitera comme une image intégrée. Lors de l'utilisation d'une URL distante, l'adresse doit être une adresse http(s):// téléchargeable publiquement par la plateforme (http et https sont pris en charge), sans dépendre de cookies, de Referer, d'une page de connexion ni d'une session de navigateur, et doit rester valide pendant le traitement par la plateforme.
Une image_url distante passe d'abord par le cache de relais rapide de la plateforme, puis est mise en miroir par la bibliothèque de ressources ; une image ordinaire peut généralement être traitée en quelques secondes. La plateforme prend également en charge les images intégrées : vous pouvez écrire la valeur de image_url sous la forme data:image/...;base64,..., ou utiliser le champ distinct data_url. Pour une image déjà présente localement sur le client, la soumission intégrée permet d'économiser un téléchargement externe supplémentaire.
data_url envoie l'image entière en base64 (environ 1,33 fois le volume de l'image d'origine) ; ne l'utilisez que lorsque l'image ne peut vraiment pas disposer d'une adresse publique : par exemple, une image derrière une adresse nécessitant une connexion, sur un réseau interne, ou uniquement disponible en fichier local. Avec data_url, la durée d'import dépend de la taille de l'image et de la bande passante de l'appelant ; la plateforme écrit l'image dans un relais temporaire à court terme, et non dans le stockage permanent de ressources de la plateforme. Une fois la mise en miroir par la bibliothèque de ressources terminée et le statut passé à Active, l'aperçu utilise en priorité le preview_url renvoyé par la bibliothèque de ressources ; le fichier temporaire est nettoyé automatiquement par le service de relais.
Les ressources image ne peuvent être soumises qu'à un groupe virtual ; les ressources d'un groupe real sont produites par le processus d'autorisation de portrait par scan de code QR.
request_id peut également être soumis via l'en-tête Idempotency-Key. Lorsque le même compte soumet à nouveau avec le même request_id, la plateforme renvoie la même ressource créée avec succès la première fois et ne recrée pas de ressource en amont. Si request_id n'est pas soumis, la plateforme génère automatiquement une valeur stable à partir du compte, du groupe, du titre et de la charge utile de l'image d'origine ; une nouvelle tentative avec la même image et le même titre peut également être réutilisée en toute sécurité.
Exemple de requête
curl -X POST "$LOCOPAL_BASE_URL/api/v1/materials/assets" \
-H "Authorization: Bearer $LOCOPAL_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<JSON
{
"group_id": "group-1789069780-5762d1",
"request_id": "brand-character-front-001",
"title": "角色正面定妆图",
"image_url": "$LOCOPAL_IMAGE_URL",
"tags": ["人物", "正面"]
}
JSONPour une image locale, soumettez plutôt data_url :
{
"group_id": "group-1789069780-5762d1",
"request_id": "brand-character-front-001",
"title": "角色正面定妆图",
"file_name": "person.png",
"data_url": "data:image/png;base64,iVBORw0KGgo..."
}Si le client souhaite continuer à utiliser le champ image_url, il peut également soumettre directement une image intégrée :
{
"group_id": "group-1789069780-5762d1",
"request_id": "brand-character-front-001",
"title": "角色正面定妆图",
"image_url": "data:image/png;base64,iVBORw0KGgo..."
}Paramètres de réponse
| Paramètre | Type | Description |
|---|---|---|
code | integer | 0 en cas de succès |
msg | string | 图片素材已提交 en cas de succès |
data.asset_id | string | ID de ressource, égal à data.asset.id |
data.asset.id | string | ID de ressource, référencé dans les tâches vidéo via asset://<id> |
data.asset.kind | string | Type de ressource, image pour une image |
data.asset.title | string | Nom de la ressource (valeur finale après complétion automatique) |
data.asset.request_id | string / null | ID de requête idempotent utilisé pour cet import |
data.asset.platform_asset_id | string | ID de ressource de la plateforme du service de ressources, utilisé pour le diagnostic ; dans le déploiement actuel, il est généralement identique à id |
data.asset.group_id | string | ID du groupe d'appartenance |
data.asset.status | string | Processing après acceptation |
data.asset.error_message | string / null | Cause de l'échec du traitement, null en cas normal |
data.asset.note | string / null | Remarque, null si elle n'est pas soumise |
data.asset.tags | string[] | Liste d'étiquettes, généralement un tableau vide si elles ne sont pas soumises |
data.asset.mime_type | string / null | Type MIME renvoyé par le service de ressources, null s'il n'est pas renvoyé |
data.asset.bytes | integer / null | Taille du fichier de ressource, null si le service de ressources ne la renvoie pas |
data.asset.created_at | integer | Date de création (secondes Unix) |
data.asset.updated_at | integer | Date de mise à jour (secondes Unix) |
Corps de la réponse
{
"code": 0,
"data": {
"asset_id": "asset-20260911035115-etexu",
"asset": {
"id": "asset-20260911035115-etexu",
"platform_asset_id": "asset-20260911035115-etexu",
"kind": "image",
"title": "角色正面定妆图",
"group_id": "group-1789069780-5762d1",
"status": "Processing",
"error_message": null,
"note": null,
"tags": [],
"mime_type": null,
"bytes": null,
"created_at": 1789069876,
"updated_at": 1789069876
}
},
"msg": "图片素材已提交"
}Une soumission réussie signifie seulement que la ressource a été acceptée ; vous devez encore interroger son statut avant de soumettre une tâche vidéo.
Réponses d'erreur
| HTTP | msg | Description |
|---|---|---|
400 | 缺少 group_id | Aucun groupe fourni |
400 | image_url 必须是可公开下载的 http(s) 地址,当前为 … | Le protocole de l'adresse n'est pas http / https, ou l'adresse est incomplète ; utilisez une adresse http(s) publique, ou utilisez data_url |
400 | image_url 与 data_url 只能提交一个 | Les deux champs sont soumis en même temps, ou aucun ne l'est |
400 | data_url 必须是 data:image/...;base64,... 格式 | Format de data_url incorrect |
400 | 图片数据无效或超过 20MB | Les données d'image sont vides ou dépassent 20 Mo |
400 | 素材名称不能为空 / 素材名称不能超过 64 个字符 | Échec de validation de title |
401 | Invalid token | Clé API absente, erronée ou expirée |
404 | 素材分组不存在或不属于当前账号 | group_id incorrect ou n'appartenant pas au compte actuel |
404 | 素材分组不存在或不是虚拟素材分组 | Soumission d'une image à un groupe real |
502 / 503 | 素材服务暂不可用 | Service de ressources anormal ; conservez les informations de requête et réessayez |
Interroger une ressource unique
/api/v1/materials/assets/{asset_id}Méthode d'authentification
Authorization: Bearer <API_KEY>.
Paramètres de la requête · path
Prop
Type
Exemple de requête
curl "$LOCOPAL_BASE_URL/api/v1/materials/assets/asset-20260911035115-etexu" \
-H "Authorization: Bearer $LOCOPAL_API_KEY"Paramètres de réponse
| Paramètre | Type | Description |
|---|---|---|
code | integer | 0 en cas de succès |
msg | string | OK en cas de succès |
data.asset | object | Objet ressource, champs identiques à l'interface de soumission |
Valeurs de data.asset.status et traitement correspondant :
| Statut | Signification | Comportement du programme |
|---|---|---|
Processing | La ressource est encore en cours de traitement ou de validation | Enregistrez asset_id, interrogez plus tard, ne soumettez pas à nouveau |
Active | La ressource peut être utilisée pour les tâches prenant en charge ce type de ressource | Utilisez asset://<asset_id> dans le content de la vidéo |
Failed | Le traitement de la ressource a échoué | Lisez error_message, corrigez l'image source puis créez une nouvelle ressource |
Corps de la réponse
{
"code": 0,
"data": {
"asset": {
"id": "asset-20260911035115-etexu",
"platform_asset_id": "asset-20260911035115-etexu",
"kind": "image",
"title": "角色正面定妆图",
"group_id": "group-1789069780-5762d1",
"status": "Active",
"error_message": null,
"note": null,
"tags": [],
"mime_type": null,
"bytes": null,
"created_at": 1789069876,
"updated_at": 1789069877
}
},
"msg": "OK"
}Un échec de validation renvoie également HTTP 200, la cause de l'échec se trouvant dans error_message :
{
"code": 0,
"data": {
"asset": {
"id": "asset-20260911035115-etexu",
"status": "Failed",
"error_message": "素材处理失败"
}
},
"msg": "OK"
}Réponses d'erreur
| HTTP | msg | Description |
|---|---|---|
401 | Invalid token | Clé API absente, erronée ou expirée |
404 | 素材不存在或无权访问 | ID de ressource incorrect, supprimé ou n'appartenant pas au compte actuel |
502 / 503 | 素材服务暂不可用 | Service de ressources anormal ; conservez les informations de requête et réessayez |
Interroger la liste des ressources
/api/v1/materials/assetsMéthode d'authentification
Authorization: Bearer <API_KEY>.
Paramètres de la requête · query
| Paramètre | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
page | integer | Non | 1 | Numéro de page |
page_size | integer | Non | 20 | Nombre d'éléments par page, 100 maximum |
group_id | string | Non | — | Ne renvoie que les ressources de ce groupe |
Exemple de requête
curl "$LOCOPAL_BASE_URL/api/v1/materials/assets?page=1&page_size=20&group_id=group-1789069780-5762d1" \
-H "Authorization: Bearer $LOCOPAL_API_KEY"Paramètres de réponse
| Paramètre | Type | Description |
|---|---|---|
code | integer | 0 en cas de succès |
msg | string | OK en cas de succès |
data.total | integer | Nombre total de ressources correspondantes |
data.page / data.page_size | integer | Paramètres de pagination de cette requête |
data.assets | array | Liste des ressources, champs identiques à l'interface de soumission |
Corps de la réponse
{
"code": 0,
"data": {
"assets": [
{
"id": "asset-20260911035115-etexu",
"platform_asset_id": "asset-20260911035115-etexu",
"kind": "image",
"title": "角色正面定妆图",
"group_id": "group-1789069780-5762d1",
"status": "Active",
"error_message": null,
"note": null,
"tags": [],
"mime_type": null,
"bytes": null,
"created_at": 1789069876,
"updated_at": 1789069877
}
],
"total": 1,
"page": 1,
"page_size": 20
},
"msg": "OK"
}Réponses d'erreur
| HTTP | msg | Description |
|---|---|---|
401 | Invalid token | Clé API absente, erronée ou expirée |
404 | 素材分组不存在或无权访问 | Le group_id indiqué n'existe pas ou n'appartient pas au compte actuel |
500 / 502 / 503 | 素材服务暂不可用 | Service de ressources anormal ; conservez les informations de requête et réessayez |
