Skip to main content
POST
segment e region_edit usam o endpoint assíncrono de imagens existente. Salve o task_id retornado e consulte Obter status da tarefa; a solicitação de criação não retorna diretamente as camadas ou imagens finais.
Nunca exponha uma API Key no bundle do navegador, LocalStorage, URL ou logs do frontend. Chame a APIMart pelo backend ou BFF.

Visão geral das operações

source_task_id e image_id não são intercambiáveis. segment recebe o ID da tarefa de origem; region_edit recebe o ID do ativo de imagem. Para segmentar uma imagem editada, use o ID da tarefa region_edit concluída como novo source_task_id.

Cabeçalhos da solicitação

Use Authorization: Bearer <APIMART_API_KEY>, Content-Type: application/json e Accept: application/json. Idempotency-Key é opcional e fortemente recomendado para solicitações region_edit pagas. Aceita de 1 a 191 caracteres ASCII visíveis; recomenda-se UUID. Use uma nova chave por operação lógica. Uma repetição de rede da mesma solicitação deve reutilizar a chave e o body originais. Se o resultado for indeterminado, não repita automaticamente com outra chave.

Fluxo de tarefa assíncrona

Uma criação bem-sucedida retorna HTTP 200 e data[0].task_id. Consulte GET /v1/tasks/{task_id}?language=pt a cada 2 segundos, aumentando até 5 segundos, com limite total de 10 minutos. Interrompa a consulta anterior quando a imagem de origem mudar.
A consulta pode retornar HTTP 200 enquanto data.status é failed. Determine sempre o resultado por data.status e mostre data.error quando existir.

segment

Parâmetros da solicitação

segment não precisa de prompt. Não envie image_id, image_index, billing_model_name, n, size ou response_format. cache_only=true e refresh=true são mutuamente exclusivos.

Exemplos de solicitação

Um cache miss ainda é uma tarefa bem-sucedida. Use cache_status ou from_cache; não deduza um hit por cached.

Resposta concluída

Em segment, data.result contém diretamente o resultado da segmentação e não fica dentro de images.
Um objeto sem mask_rle ou mask_url válido só permite edição aproximada por caixa.

Decodificar mask_rle

mask_rle.counts é uma string de contagens compactadas COCO, não Base64 nem zlib. Ela é expandida por colunas; o primeiro trecho é fundo e depois alterna primeiro plano e fundo. O TypeScript abaixo converte para uma máscara binária por linhas adequada ao navegador:
Decodifique máscaras grandes em um Web Worker. Não envie valores completos de mask_rle.counts para logs, análises, URLs ou relatórios de erro.

Converter máscaras em seleções precisas

Trace componentes conectados e furos, simplifique os contornos e normalize cada ponto em 0–1. Cada anel precisa de pelo menos 3 pontos distintos, área diferente de zero e não pode se cruzar. Mantenha no máximo 16 regiões maiores por camada e 400 pontos por anel.
mask_size é [height,width] e usa coordenadas da máscara original, não dimensões CSS. Com object-fit: contain, desconte as margens, escale pela área realmente desenhada e limite o resultado a 0–1.
A leitura de pixels da imagem ou de mask_url requer CORS. Defina crossOrigin = "anonymous" antes de src ou obtenha um Blob. Decodificar mask_rle diretamente evita essa dependência.

Editar uma região: region_edit

Parâmetros da solicitação

Pelo menos um entre selection_regions, boxes ou object_indices deve conter dados. A API aceita combinações, mas o frontend deve usar um método por solicitação.
Não envie billing_model_name, size, aspect_ratio, source_aspect_ratio, source_size ou image_urls. Omita n ou use 1; omita claim_asset ou use false; omita response_format ou use url. Base64 e stream=true não são aceitos.

Métodos de seleção

points pode ser uma lista plana ou pares aninhados. Cada valor deve ser finito e estar em 0–1; cada anel exige pelo menos 3 pares.

Resposta concluída

Prefira result.images[0].items[0]. Em respostas antigas, associe url[0] a image_ids[0] somente quando os arrays tiverem o mesmo tamanho. Continue apenas após obter uma URL HTTP(S) e um novo image_id. Use expires_at como referência de expiração; não fixe um número de horas. Baixe ou armazene ativos necessários a longo prazo.

Edição contínua

Após concluir uma edição, atualize juntos a URL exibida, o ID do ativo atual e o ID da tarefa de origem, e limpe camadas e consultas antigas.
  • Segmentar novamente: usar o ID desta tarefa region_edit como source_task_id
  • Editar novamente: usar o novo image_id retornado
  • Nunca envie image_id para segment nem continue editando o ID da imagem anterior.

Tratamento de erros

Cobrança

  • segment é gratuito e termina com cost=0 e credits_cost=0, mas exige autenticação e tarefa de origem válida.
  • region_edit é pago. Use cost e credits_cost da tarefa concluída; não fixe preços no frontend.
  • Nunca envie o campo interno billing_model_name.

Checklist do frontend

  • Manter a API Key somente no backend ou BFF.
  • Enviar apenas source_task_id para segment; não enviar image_id ou image_index.
  • Usar o image_id de segment em region_edit e fornecer ao menos um método de seleção.
  • Usar selection_regions para edição precisa; object_indices é apenas aproximação por caixa.
  • Sempre interpretar mask_size como [height,width] e compensar escala e margens.
  • Reutilizar a chave idempotente original no mesmo retry e validar a URL e o novo image_id.