Skip to main content
POST
segment et region_edit utilisent le point d’entrée d’images asynchrone existant. Enregistrez le task_id, puis interrogez Obtenir le statut de la tâche ; la requête de création ne renvoie pas directement les calques ou images finaux.
N’exposez jamais une clé API dans le bundle du navigateur, LocalStorage, une URL ou les journaux frontend. Appelez APIMart via votre backend ou BFF.

Vue d’ensemble des opérations

source_task_id et image_id ne sont pas interchangeables. segment reçoit l’ID de tâche source, region_edit l’ID de l’asset image. Pour segmenter une image modifiée, utilisez l’ID de la tâche region_edit terminée comme nouveau source_task_id.

En-têtes de requête

Utilisez Authorization: Bearer <APIMART_API_KEY>, Content-Type: application/json et Accept: application/json. Idempotency-Key est facultatif et fortement recommandé pour les requêtes region_edit payantes. Il accepte 1 à 191 caractères ASCII visibles ; un UUID est recommandé. Utilisez une nouvelle clé par opération logique. Une nouvelle tentative réseau de la même requête doit réutiliser la clé et le corps d’origine. Si le résultat est indéterminé, ne relancez pas automatiquement avec une nouvelle clé.

Flux de tâche asynchrone

Une création réussie renvoie HTTP 200 et data[0].task_id. Interrogez GET /v1/tasks/{task_id}?language=fr toutes les 2 secondes, puis jusqu’à 5 secondes maximum, avec une limite globale de 10 minutes. Arrêtez l’ancien polling lorsque l’image source change.
Une consultation peut renvoyer HTTP 200 alors que data.status vaut failed. Déterminez toujours le résultat via data.status et affichez data.error s’il existe.

segment

Paramètres de requête

segment ne nécessite pas de prompt. N’envoyez pas image_id, image_index, billing_model_name, n, size ou response_format. cache_only=true et refresh=true sont incompatibles.

Exemples de requête

Une absence du cache reste une tâche réussie. Utilisez cache_status (hit ou miss) ou from_cache ; ne déduisez pas un hit de cached.

Réponse terminée

Pour segment, data.result contient directement le résultat de segmentation ; il n’est pas enveloppé dans images.
Sans mask_rle ou mask_url valide, un objet ne peut être modifié que par approximation rectangulaire.

Décoder mask_rle

mask_rle.counts est une chaîne de comptages compressés COCO, ni Base64 ni zlib. Elle se déploie par colonnes ; le premier run est l’arrière-plan, puis avant-plan et arrière-plan alternent. Le TypeScript suivant la convertit en masque binaire par lignes adapté au navigateur :
Décodez les grands masques dans un Web Worker. N’envoyez jamais les valeurs complètes de mask_rle.counts dans les logs, analyses, URL ou rapports d’erreur.

Convertir les masques en sélections précises

Tracez les composants connexes et les trous, simplifiez les contours et normalisez chaque point sur 0–1. Chaque anneau doit avoir au moins 3 points distincts, une aire non nulle et aucune auto-intersection. Conservez au plus les 16 plus grandes régions par calque et 400 points par anneau.
mask_size est [height,width] et utilise les coordonnées du masque source, pas les dimensions CSS. Avec object-fit: contain, retirez les marges, mettez à l’échelle selon la zone réellement dessinée et limitez le résultat à 0–1.
La lecture des pixels de l’image source ou de mask_url exige CORS. Définissez crossOrigin = "anonymous" avant src ou récupérez un Blob. Le décodage direct de mask_rle évite cette dépendance.

Modifier une zone : region_edit

Paramètres de requête

Au moins l’un de selection_regions, boxes ou object_indices doit être non vide. L’API accepte les combinaisons, mais le frontend devrait utiliser une seule méthode par requête.
N’envoyez pas billing_model_name, size, aspect_ratio, source_aspect_ratio, source_size ou image_urls. Omettez n ou utilisez 1, omettez claim_asset ou utilisez false, omettez response_format ou utilisez url. Base64 et stream=true ne sont pas pris en charge.

Méthodes de sélection

points peut être une liste plate ou des paires imbriquées. Chaque valeur doit être finie et dans 0–1 ; chaque anneau exige au moins 3 paires.

Réponse terminée

Préférez result.images[0].items[0]. Pour une ancienne réponse, n’associez url[0] et image_ids[0] que si les tableaux ont la même longueur. Continuez uniquement après obtention d’une URL HTTP(S) et d’un nouveau image_id. Utilisez expires_at comme référence d’expiration ; ne figez pas un nombre d’heures. Téléchargez ou conservez les assets nécessaires à long terme.

Édition continue

À la fin d’une édition, mettez à jour ensemble l’URL affichée, l’ID d’asset actuel et l’ID de tâche source, puis effacez les anciens calques et états de polling.
  • Segmenter à nouveau : utiliser l’ID de cette tâche region_edit comme source_task_id
  • Modifier à nouveau : utiliser le nouveau image_id renvoyé
  • Ne transmettez jamais image_id à segment et ne continuez jamais avec l’ancien ID d’image.

Gestion des erreurs

Facturation

  • segment est gratuit et se termine avec cost=0 et credits_cost=0, mais exige une authentification et une tâche source valide.
  • region_edit est payant. Utilisez cost et credits_cost de la tâche terminée ; ne figez pas les prix dans le frontend.
  • N’envoyez jamais le champ interne billing_model_name.

Liste de contrôle frontend

  • Conserver la clé API uniquement dans le backend ou BFF.
  • Envoyer uniquement source_task_id à segment, jamais image_id ou image_index.
  • Utiliser le image_id de segment pour region_edit avec au moins une méthode de sélection.
  • Utiliser selection_regions pour l’édition précise ; object_indices n’est qu’une approximation rectangulaire.
  • Toujours lire mask_size comme [height,width] et gérer mise à l’échelle et marges.
  • Réutiliser la clé idempotente d’origine pour le même retry et valider l’URL ainsi que le nouveau image_id.