Skip to main content
POST
segment y region_edit usan el endpoint asíncrono de imágenes existente. Guarda el task_id devuelto y consulta Obtener estado de la tarea; la solicitud de creación no devuelve las capas ni imágenes finales.
Nunca expongas una API Key en el paquete del navegador, LocalStorage, una URL o los registros del frontend. Llama a APIMart desde tu backend o BFF.

Resumen de operaciones

source_task_id e image_id no son intercambiables. segment recibe el ID de la tarea de origen y region_edit el ID del recurso de imagen. Para segmentar una imagen editada, usa el ID de la tarea region_edit completada como nuevo source_task_id.

Encabezados de solicitud

Usa Authorization: Bearer <APIMART_API_KEY>, Content-Type: application/json y Accept: application/json. Idempotency-Key es opcional y se recomienda especialmente para solicitudes region_edit de pago. Admite entre 1 y 191 caracteres ASCII visibles; se recomienda un UUID. Usa una clave nueva por operación lógica. Un reintento de red de la misma solicitud debe reutilizar la clave original y el mismo cuerpo. Si el resultado es indeterminado, no reintentes automáticamente con otra clave.

Flujo de tarea asíncrona

Una creación correcta devuelve HTTP 200 y data[0].task_id. Consulta GET /v1/tasks/{task_id}?language=es cada 2 segundos, aumenta hasta un máximo de 5 segundos y limita el total a 10 minutos. Detén el sondeo anterior al cambiar la imagen de origen.
La consulta puede devolver HTTP 200 aunque data.status sea failed. Determina siempre el resultado mediante data.status y muestra data.error cuando exista.

segment

Parámetros de solicitud

segment no necesita prompt. No envíes image_id, image_index, billing_model_name, n, size ni response_format. cache_only=true y refresh=true son incompatibles.

Ejemplos de solicitud

Una falta de caché sigue siendo una tarea correcta. Usa cache_status (hit o miss) o from_cache; no deduzcas el acierto mediante cached.

Respuesta completada

En segment, data.result contiene directamente la segmentación y no está dentro de images.
Un objeto sin mask_rle ni mask_url válido solo admite edición aproximada por cuadro.

Decodificar mask_rle

mask_rle.counts es una cadena de conteos comprimidos COCO, no Base64 ni zlib. Se expande por columnas; el primer tramo es fondo y luego alterna primer plano y fondo. El siguiente TypeScript lo convierte en una máscara binaria por filas adecuada para el navegador:
Decodifica máscaras grandes en un Web Worker. No envíes valores completos de mask_rle.counts a registros, analítica, URLs ni informes de errores.

Convertir máscaras en selecciones precisas

Traza componentes conectados y huecos, simplifica los contornos y normaliza cada punto a 0–1. Cada anillo requiere al menos 3 puntos distintos, área no nula y no debe autointersecarse. Conserva como máximo las 16 regiones mayores por capa y 400 puntos por anillo.
mask_size es [height,width] y usa coordenadas de la máscara original, no del tamaño CSS. Con object-fit: contain, resta los márgenes, escala según el área dibujada y limita el resultado a 0–1.
Leer píxeles de la imagen o de mask_url requiere CORS. Define crossOrigin = "anonymous" antes de src o recupera un Blob. Decodificar mask_rle directamente evita esta dependencia.

Editar una región: region_edit

Parámetros de solicitud

Al menos uno de selection_regions, boxes u object_indices debe contener datos. La API permite combinarlos, pero el frontend debería usar un solo método por solicitud.
No envíes billing_model_name, size, aspect_ratio, source_aspect_ratio, source_size ni image_urls. Omite n o usa 1; omite claim_asset o usa false; omite response_format o usa url. No se admiten Base64 ni stream=true.

Métodos de selección

points puede ser plano o pares anidados. Cada valor debe ser finito y estar entre 0–1; cada anillo necesita al menos 3 pares.

Respuesta completada

Prioriza result.images[0].items[0]. En respuestas antiguas, empareja url[0] con image_ids[0] solo si ambas matrices tienen la misma longitud. Continúa únicamente tras obtener una URL HTTP(S) y un image_id nuevo. Usa expires_at como referencia de caducidad; no fijes un número de horas. Descarga o guarda los recursos necesarios a largo plazo.

Edición continua

Al completar una edición, actualiza a la vez la URL visible, el ID del recurso y el ID de la tarea de origen, y limpia las capas y el sondeo anteriores.
  • Volver a segmentar: usa el ID de esta tarea region_edit como source_task_id
  • Volver a editar: usa el nuevo image_id devuelto
  • Nunca envíes image_id a segment ni sigas editando el ID de la imagen anterior.

Gestión de errores

Facturación

  • segment es gratuito y termina con cost=0 y credits_cost=0, pero requiere autenticación y una tarea de origen válida.
  • region_edit es de pago. Usa cost y credits_cost de la tarea completada; no fijes precios en el frontend.
  • Nunca envíes el campo interno billing_model_name.

Lista de comprobación del frontend

  • Mantener la API Key solo en el backend o BFF.
  • Enviar solo source_task_id a segment; no enviar image_id ni image_index.
  • Usar el image_id de segment para region_edit y aportar al menos un método de selección.
  • Usar selection_regions para edición precisa; object_indices solo aproxima un cuadro.
  • Interpretar siempre mask_size como [height,width] y compensar escala y márgenes.
  • Reutilizar la clave idempotente original en el mismo reintento y validar tanto la URL como el nuevo image_id.