Build · Automação no-code
Automatize um catálogo sem escrever código
Em uma frase
Uma execução no-code envia um lote de fotos de produtos com um nó HTTP, aguarda 3 segundos, lê o status do lote e repete até a conclusão antes de gravar as URLs de volta na sua planilha.
- Credits: 4 credits em 2K · 5 credits em 4K
- Tempo típico: 1.5–4 min per image
- Processamento: assíncrono, polling
Todos os números nesta página vêm de a documentação da API da Photta · verificado
Um nó HTTP, um nó de espera e uma condição. n8n, Make ou qualquer ferramenta compatível com HTTP pode processar um catálogo inteiro pelo endpoint de lote.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin/batch \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_images": [
{
"image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/shirt-front.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/trousers-front.jpg",
"image_side": "front"
}
],
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, buttoned up",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/ghost-mannequin/batch", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_images": [
{
"image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/shirt-front.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/trousers-front.jpg",
"image_side": "front"
}
],
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, buttoned up",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/ghost-mannequin/batch",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_images": [
{
"image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/shirt-front.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/trousers-front.jpg",
"image_side": "front"
}
],
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, buttoned up",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
},
)
data = res.json()["data"] # data["id"], data["status"]Como funciona
Uma planilha entra, uma pasta de imagens sai
Exporte o catálogo, configure um nó HTTP, faça um loop com esperas e grave as URLs de volta.
Passo 1
Exporte o catálogo
Uma linha por peça de roupa com uma URL pública de imagem. Essa coluna é a única entrada que o endpoint de lote precisa.
Passo 2
Obtenha uma chave de API da Photta
Armazene-a no cofre de credenciais da sua ferramenta de automação, não no corpo do nó, para que os fluxos de trabalho exportados não exponham nenhum segredo.
Passo 3
Configure o nó HTTP
POST, o cabeçalho bearer e o corpo JSON mostrado aqui. Cada item no array é uma peça de roupa; os campos de estilo se aplicam a todos eles.
Passo 4
Faça um loop com esperas
Aguarde 3 segundos, leia o lote, verifique se o status é de conclusão e repita o ciclo. Esse intervalo é o mesmo publicado na documentação.
Passo 5
Respeite os limites
O limite de tamanho de lote e o limite de lotes simultâneos seguem o seu plano. Envie um lote, termine-o e envie o próximo.
Passo 6
Grave as URLs de volta
Quando o lote é concluído, cada item traz sua própria URL de saída. Grave-as na planilha e baixe os arquivos na mesma execução.
Os nós e o que vai dentro deles
O corpo da requisição é o exemplo publicado na documentação da API; o loop segue o intervalo de polling documentado.
{
"product_images": [
{
"image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/shirt-front.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/trousers-front.jpg",
"image_side": "front"
}
],
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, buttoned up",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin/batch \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_images": [
{
"image": "https://cdn.yourstore.com/products/jacket-front.jpg",
"back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/shirt-front.jpg",
"image_side": "front"
},
{
"image": "https://cdn.yourstore.com/products/trousers-front.jpg",
"image_side": "front"
}
],
"style": "3d",
"background_color": "white",
"resolution": "2K",
"aspect_ratio": "3:4",
"user_instruction": "closed front, buttoned up",
"brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id'){
"nodes": [
{
"name": "Wait",
"type": "n8n-nodes-base.wait",
"parameters": {
"amount": 3,
"unit": "seconds"
}
},
{
"name": "Read batch",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://api.photta.app/api/v1/ghost-mannequin/batch/{{ $json.data.batch_id }}"
}
},
{
"name": "Done?",
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.data.status }}",
"value2": "completed"
}
]
}
}
}
]
}# 600 requests per minute per key, fixed window.
# One batch submission plus one poll every 3 seconds is ~21 requests per minute
# per batch in flight, so the concurrency cap binds long before the rate limit.
# On a 429, wait the Retry-After seconds (30 by default) before the next node runs.Dúvidas frequentes de desenvolvedores
Perguntas sobre execuções no-code
Preciso escrever código?
Não. Tudo aqui é uma requisição HTTP com corpo JSON, que qualquer ferramenta de automação consegue enviar. O único texto que você digita é o corpo mostrado nesta página.
Quantas imagens cabem em uma execução?
O limite de lote da API é de 5 imagens nos planos Free e Hobby, 10 no Seller, 25 no Brand e 50 no Studio. Catálogos mais longos rodam como múltiplos lotes, um após o outro.
O que acontece se uma imagem falhar?
O restante do lote continua. O corpo da resposta do lote informa quantos foram concluídos e quantos falharam, e os credits dos itens que falharam são reembolsados.
Isso pode rodar em um agendamento?
Sim. Dispare o fluxo de trabalho toda noite e deixe-o capturar as linhas que ainda não possuem imagem. O loop de polling é o mesmo, seja iniciado manualmente ou por um agendamento.
Isso funciona no Make ou no Zapier?
Em qualquer lugar onde você possa enviar uma requisição HTTP com um cabeçalho e um corpo JSON, e aguardar entre as etapas. Os nomes dos nós mudam; as três etapas continuam as mesmas.
Páginas relacionadas
Leituras relacionadas
Recursos
API de ghost mannequin em lote para catálogos inteiros
Envie várias fotos de roupas em uma única requisição de ghost mannequin. IDs individuais por item, polling agregado e reserva antecipada de créditos. 4 créditos por imagem em 2K.
LerInício rápido
Primeira imagem no Photta em menos de cinco minutos.
Cadastre-se, gere uma chave de API, execute sua primeira chamada cURL, faça polling até a conclusão, persista o resultado. Cinco etapas, documentadas de ponta a ponta.
LerRate limits
LerPricing
Ler
Todos os números nesta página vêm de a documentação da API da Photta · verificado
Um catálogo, sem precisar de desenvolvedor
Um nó HTTP e uma espera. O corpo nesta página é o publicado na documentação.