ビルド · ノーコード自動化
コードを書かずにカタログを自動化する
要約
ノーコード実行では、1つのHTTPノードで製品写真のバッチを送信し、3秒待機してバッチステータスを確認。完了するまでこれを繰り返し、シートにURLを書き戻します。
- Credits: 2Kで4 credits · 4Kで5 credits
- 所要時間の目安: 1.5–4 min per image
- 処理方式: 非同期、ポーリング
このページに記載されている数値はすべて以下に基づきます: Photta APIドキュメント · 確認済み
HTTPノード、待機ノード、そして条件分岐。n8n、Make、またはHTTPを扱える任意のツールを使用すれば、バッチendpointを通じてカタログ全体を処理できます。
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"]仕組み
スプレッドシートを入力し、画像フォルダを出力する
カタログをエクスポートし、HTTPノードを1つ設定し、待機を挟んでループさせ、URLを書き戻します。
ステップ 1
カタログのエクスポート
公開画像URLを含む衣服1着につき1行。バッチendpointが必要とする入力は、このカラムのみです。
ステップ 2
Photta APIキーの取得
エクスポートしたワークフローにシークレットが含まれないよう、ノードのボディではなく、自動化ツールのクレデンシャルボールトに保存してください。
ステップ 3
HTTPノードの設定
POST、Bearerヘッダー、およびここに示されているJSONボディ。配列内の各アイテムが1着の衣服に対応し、スタイリングフィールドはそれらすべてに適用されます。
ステップ 4
待機を挟んだループ処理
3秒待機し、バッチを読み込み、ステータスが完了しているか確認し、次の周回へ進みます。このインターバルはドキュメントで指定されている値です。
ステップ 5
レート制限の遵守
バッチサイズの上限および同時実行バッチの上限は、いずれもプランに準拠します。1つのバッチを送信して完了させてから、次のバッチを送信してください。
ステップ 6
URLの書き戻し
バッチが完了すると、各アイテムに独自の出力URLが付与されます。それらをシートに書き戻し、同じ実行内でファイルをダウンロードします。
ノードの構成と設定内容
リクエストボディはAPIドキュメントに掲載されているサンプル通りです。ループ処理にはドキュメント記載のpolling間隔を使用します。
{
"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.開発者からのよくある質問
ノーコード実行に関するFAQ
コードを書く必要はありますか?
いいえ。ここにある処理はすべてJSONボディを伴うHTTPリクエストであり、あらゆる自動化ツールから送信可能です。入力が必要なテキストは、このページに表示されているボディのみです。
1回の実行で何枚の画像を処理できますか?
APIのバッチ上限は、FreeおよびHobbyで5枚、Sellerで10枚、Brandで25枚、Studioで50枚です。それ以上のカタログは、複数のバッチとして順番に実行します。
1枚の画像が失敗した場合はどうなりますか?
バッチの残りの処理は継続されます。バッチのレスポンスボディにcompletedとfailedの件数がレポートされ、失敗したアイテムのcreditsは返還されます。
定期実行(スケジュール実行)は可能ですか?
はい。ワークフローを毎晩トリガーし、画像がまだない行を処理させることができます。ポーリングループの動作は、手動トリガーでもスケジュール実行でも同じです。
MakeやZapierでも動作しますか?
ヘッダーとJSONボディを含むHTTPリクエストを送信し、ステップ間で待機できる環境であればどこでも動作します。ノード名はツールによって異なりますが、3つのステップ自体は同じです。