API
esc

Saisissez votre recherche.

Générer des rendus

Deux familles de tâches sur un même workflow. L'Embellisseur produit génère le produit seul sur un arrière-plan ; un shooting photo le place sur un mannequin. Les deux renvoient une tâche que vous interrogez ou à laquelle vous vous abonnez.

Toutes les tâches partagent la même forme : la même authentification, le même cycle de vie queued → processing → completed | failed, le même contrat de livraison. Choisissez l’endpoint selon ce que vous souhaitez obtenir en retour.

Embellisseur produit

POST/v1/tasks/beautifier

Un rendu propre du produit seul, sur l’arrière-plan de votre choix. subtype sélectionne le flux.

Sous-type Entrées
clothing style est obligatoire : ghost_mannequin (« Ghost mannequin » dans le tableau de bord) ou flatlay. angle_shot indique la vue importée à partir de laquelle générer le rendu (front ou back).
shoes style est interdit. angle_shot est la vue de sortie souhaitée, issue du catalogue chaussures. Le produit doit comporter au moins une photo importée par l’utilisateur.
headwear Même forme que pour les chaussures, avec le catalogue d’angles de vue des couvre-chefs.
glasses Même forme que pour les chaussures, avec le catalogue d’angles de vue des lunettes.
bags Même forme que pour les chaussures, avec le catalogue d’angles de vue des sacs. top_open demande une photo du sac ouvert : sans elle, la tâche échoue et n’est pas facturée.
Terminal window
curl https://api.veeton.com/v1/tasks/beautifier \
-H "Authorization: Bearer $VEETON_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"subtype": "clothing",
"inputs": { "product_id": "01HX5K2MZ7A3Q4FBNDC0EVDXY1", "background": "#ffffff",
"angle_shot": "front", "style": "ghost_mannequin" }
}'

background est un slug du catalogue d’arrière-plans, commun à tous les sous-types beautifier. Les slugs hexadécimaux incluent le # initial et sont insensibles à la casse. Les galeries complètes d’arrière-plans, d’angles de vue et de styles se trouvent dans la référence de l’API.

Shooting photo

POST/v1/tasks/tryon

Le produit porté par un mannequin, dans la scène de votre choix. Un shooting photo (tryon) n’a qu’un seul flux : c’est le type du produit lui-même qui pilote le worker, il n’y a donc pas de subtype.

Terminal window
curl https://api.veeton.com/v1/tasks/tryon \
-H "Authorization: Bearer $VEETON_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"inputs": [
{ "product_id": "01HX5K2MZ7A3Q4FBNDC0EVDXY1",
"model_id": "01HX5K2MZ7A3Q4FBNDC0EVDXMD1",
"outfit_product_ids": ["01HX5K2MZ7A3Q4FBNDC0EVDXPN"],
"background": "park",
"angle_shot": "full_body_relaxed_symmetric",
"gaze": "camera" }
]
}'
Entrée Signification
product_id Le produit principal. Il doit vous appartenir et comporter au moins une photo importée par l’utilisateur.
model_id Un mannequin issu de GET /v1/models : les mannequins publics sélectionnés par Veeton et les mannequins générés par votre organisation partagent un même espace d’identifiants. Traitez les identifiants comme opaques.
outfit_product_ids Les pièces de stylisme : jusqu’à 10 produits supplémentaires portés avec le produit principal (le principal est un haut, le stylisme un pantalon et des chaussures). Ne peut pas inclure le produit principal.
background Un slug du catalogue du shooting photo : toutes les catégories de l’Embellisseur produit, plus des scènes d’intérieur et d’extérieur.
angle_shot Un slug du catalogue d’angles de vue. Les angles de vue personnalisés de votre organisation sont également acceptés.
gaze Le « Regard » du tableau de bord : auto (par défaut) garde le regard de l’angle de vue, camera fait regarder l’objectif (une vue de dos garde sa pose), away fait regarder ailleurs.
aspect_ratio Le format de la sortie, largeur/hauteur : auto (par défaut) ou l’un de 1/1, 2/3, 3/4, 4/5, 9/16, 3/2, 4/3, 16/9. auto suit l’angle de vue : un angle de vue carré donne une image carrée, comme un shooting photo lancé depuis le tableau de bord avec Format sur Auto. Un format explicite le remplace et le cadrage s’y adapte.

Le corps est toujours un tableau de 1 à 20 entrées et la réponse est toujours { "data": Task[] }, une tâche par entrée, dans l’ordre de soumission.

Groupes de cohérence

Les entrées qui partagent les mêmes model_id, product_id et outfit_product_ids sont envoyées ensemble au traitement, en tant que groupe de cohérence : l’identité et le styling sont calculés une seule fois puis réutilisés, de sorte que les sorties forment une même série. Faites varier angle_shot, background ou gaze entre les entrées d’une même requête pour obtenir des variantes cohérentes. Des requêtes distinctes ne partagent pas de groupe.

Validation

Si une seule entrée échoue à la validation, la requête entière est refusée avec un 400 et toutes les entrées invalides sont listées, afin que vous n’ayez jamais à réessayer par dichotomie.

400 Bad Request
{
"errors": [
{ "input_index": 1, "type": "not_found", "code": "model_not_found", "param": "model_id",
"message": "Model 01HX… was not found." }
]
}

Retoucher avec l’IA

POST/v1/tasks/edit

Modifiez un résultat terminé à partir d’un prompt. Indiquez l’image à retoucher et ce que vous voulez changer.

Requête
{
"inputs": {
"image_id": "01HX5K2MZ7A3Q4FBNDC0EVDXIM",
"prompt": "Retire le pli sur la manche gauche."
}
}

Vous pouvez retoucher le résultat d’une tâche beautifier ou tryon terminée, ou d’une retouche terminée. Vos propres photos importées, ainsi que les résultats en cours ou en échec, sont refusés avec 422 image_not_editable.

Une retouche crée une nouvelle image avec son propre id. L’image indiquée ne change jamais, pas plus que le output_image de sa tâche. Les deux images sont listées dans GET /v1/images et dans les exports, et la nouvelle indique sa source dans edited_from_image_id. Pour suivre une chaîne de retouches, une image dont rien n’a été retouché en est la fin. Le choix de la version à publier vous appartient.

Lire une tâche

GET/v1/tasks/{task_id}
200 OK
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXY2",
"type": "tryon",
"subtype": null,
"status": "completed",
"product_id": "01HX5K2MZ7A3Q4FBNDC0EVDXY1",
"inputs": { "product_id": "01HX5K2MZ7A3Q4FBNDC0EVDXY1", "background": "wood", "angle_shot": "front", "style": "ghost_mannequin" },
"output_image": { "id": "01HX…", "mime_type": "image/webp", "width": 1536, "height": 2048, "url": "https://…signed…", "url_expires_at": "2026-09-03T15:32:00Z", "created_at": "2026-09-03T14:31:40Z" },
"failure_reason": null,
"started_at": "2026-09-03T14:30:12Z",
"finished_at": "2026-09-03T14:31:40Z",
"created_at": "2026-09-03T14:30:09Z"
}

inputs reprend ce avec quoi la tâche a été créée, afin qu’une tâche se comprenne seule. output_image est renseigné une fois la tâche terminée et est le même objet Image que renvoie chaque endpoint. Son id est un identifiant d’image : utilisez-le avec GET /v1/images/{id} pour obtenir une URL fraîche ; c’est aussi ce que l’export liste sous le produit avec role: beautifier ou tryon.

GET/v1/tasks liste vos tâches, des plus récentes aux plus anciennes, avec des filtres status, type, subtype et product_id. Utilisez-le pour la réconciliation après une indisponibilité de vos webhooks ; le canal canonique pour « prévenez-moi quand c’est terminé » reste le webhook.

Facturation

Chaque tâche consomme des crédits de votre abonnement au moment de sa création. Une requête sans abonnement actif ou avec un solde de crédits insuffisant est refusée avec 402 payment_required et rien n’est mis en file d’attente. Une tâche dont l’envoi au traitement échoue est marquée failed et remboursée.