{"workflow":{"id":13541,"name":"Create e-commerce listings from images with UploadToURL, GPT-4o, Shopify","views":430,"recentViews":2,"totalViews":430,"createdAt":"2026-02-20T10:43:24.324Z","description":"\nTransform raw product images into fully-optimized e-commerce listings in seconds. This workflow automates the bridge between a photo upload and a live product page by combining **UploadToURL** for hosting, **GPT-4o Vision** for content generation, and native integrations for **Shopify** and **WooCommerce**.\n\n## 🎯 What This Workflow Does\n\nTurns a single product photo into a comprehensive, SEO-ready store listing:\n\n1. **📝 Captures Product Assets** - Receives an image via mobile upload (binary) or a remote URL via Webhook.\n2. **☁️ Instant CDN Hosting** - **UploadToURL** hosts the image and generates a permanent, high-speed link for your store.\n3. **👁️ Vision AI Analysis** - **GPT-4o Vision** \"looks\" at the product to generate titles, HTML descriptions, SEO tags, and even suggested categories.\n4. **🚦 Smart Platform Routing** - Automatically detects your target platform and formats the data for:\n   - **Shopify**: Creates products via GraphQL-compatible REST with full SEO metafields.\n   - **WooCommerce**: Creates listings via REST API with Yoast SEO support and marketing blurbs.\n5. **📊 Data Enrichment** - Sanitizes SKUs, coerces pricing, and maps inventory data for a production-ready entry.\n\n## ✨ Key Features\n\n- **Seamless Asset Hosting**: Uses the **UploadToURL** community node to eliminate the need for manual cloud storage management.\n- **Zero-Copywriting Required**: AI generates 5-point bullet features, SEO titles (max 70 chars), and rich HTML descriptions.\n- **Dual-Platform Support**: Toggle between Shopify and WooCommerce within a single workflow.\n- **Automated Slugs**: Generates URL-friendly \"handles\" based on AI-suggested product names.\n- **Robust Error Handling**: Centralized logic to catch upload or API failures and return structured feedback.\n\n## 💼 Perfect For\n\n- **E-commerce Managers**: Adding hundreds of products without manual data entry.\n- **Dropshippers**: Quickly importing products from supplier URLs with fresh, unique AI copy.\n- **Retailers**: Taking photos of new stock on a phone and pushing them live to the store instantly.\n- **Agencies**: Automating catalog management for multiple client stores.\n\n## 🔧 What You'll Need\n\n### Required Integrations\n- **[UploadToURL](https://uploadtourl.com)** - To host product images and provide public CDN links.\n- **n8n Community Node** - `n8n-nodes-uploadtourl` must be installed.\n- **OpenAI API** - GPT-4o Vision for image analysis and copywriting.\n- **Shopify or WooCommerce** - Credentials for your specific store platform.\n\n### Optional Integrations\n- **Google Sheets** - To log all generated product data for an offline backup.\n- **Slack** - To notify the team whenever a new product \"Draft\" is created.\n\n## 🚀 Quick Start\n\n1. **Import Template** - Copy the JSON and import it into your n8n instance.\n2. **Install Node** - Verify the **UploadToURL** community node is installed.\n3. **Set Credentials** - Connect your UploadToURL, OpenAI, and Store (Shopify/WooCommerce) accounts.\n4. **Set Default Platform** - Configure the `DEFAULT_PLATFORM` variable (shopify/woocommerce).\n5. **Test Upload** - Send a `POST` request with an image and price to the Webhook URL.\n6. **Go Live** - Switch to \"Active\" to begin your automated catalog expansion.\n\n## 🎨 Customization Options\n\n- **Pricing Logic**: Add a node to calculate dynamic markups or currency conversions.\n- **Publishing Workflow**: Set `publishImmediately` to `false` to create all AI products as \"Drafts\" for human review.\n- **Image Processing**: Add watermarking or resizing steps before uploading to the CDN.\n- **Multi-Store Routing**: Use tags to route products to different regional store locations.\n\n## 📈 Expected Results\n\n- **95% reduction** in manual listing time (from 15 minutes to 30 seconds per product).\n- **SEO-Optimized listings** from day one with zero manual keyword research.\n- **Professional, consistent descriptions** across your entire product catalog.\n- **Immediate mobile-to-store** capability for on-the-go inventory management.\n\n## 🏆 Use Cases\n\n### High-Volume Inventory\nA warehouse team snaps photos of 50 new arrivals; the workflow creates 50 draft listings with descriptions and prices ready for final approval.\n\n### Competitor Migration\nInput a list of product image URLs from a supplier site; the AI re-writes all titles and descriptions to ensure unique content for SEO.\n\n### Boutique E-commerce\nSmall business owners can manage their entire store from their smartphone by simply \"sharing\" a photo to the n8n webhook.\n\n## 💡 Pro Tips\n\n- **High-Res Images**: Better image quality results in significantly more accurate AI feature extraction.\n- **SKU Naming**: Send a custom SKU in the webhook to maintain sync with your physical inventory or ERP system.\n- **Confidence Scores**: The AI returns a `confidenceScore`; you can set a filter to only auto-publish products with a score above 0.9.\n\n---\n\n**Ready to automate your storefront?** Import this template and connect **UploadToURL** to start building your AI-driven product catalog today.\n\n**Questions about store-specific fields?** Detailed sticky notes inside the workflow explain how to map custom attributes for both Shopify and WooCommerce.","workflow":{"meta":{"instanceId":"277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8"},"nodes":[{"id":"ae0639dc-3064-4489-99ce-34c7ae49c1ed","name":"📋 Overview","type":"n8n-nodes-base.stickyNote","position":[-128,-656],"parameters":{"width":620,"height":588,"content":"🛍️ AI Product Catalog Architect\nThe Problem: Manual product entry—uploading, resizing, and writing descriptions—is a bottleneck for e-commerce growth.\nThe Solution: A mobile-to-store pipeline that hosts images via UploadToURL, generates SEO content via Vision AI, and creates listings on Shopify or WooCommerce.\n\n⚙️ How it Works\nWebhook: Receives image (Binary or URL) + SKU/Price metadata.\n\nUploadToURL: Instantly hosts the image and returns a CDN link.\n\nGPT-4o Vision: Analyzes the photo to write titles, descriptions, and tags.\n\nStore Integration: Creates the product listing directly in your store.\n\n🔐 Credentials & Setup\nNode: Install n8n-nodes-uploadtourl (Community Node).\n\nAPIs: UploadToURL, OpenAI (GPT-4o), and Shopify/WooCommerce.\n\nVariable: Set DEFAULT_PLATFORM to shopify or woocommerce."},"typeVersion":1},{"id":"e1482d72-5e54-4f41-ad4a-776593008d19","name":"Entry & Validation","type":"n8n-nodes-base.stickyNote","position":[640,-80],"parameters":{"color":7,"width":576,"height":578,"content":"## 🚪 Entry & Validation\n**Nodes:** Webhook → Validate & Enrich → Has Remote URL?\n\n- Accepts `POST` with product metadata + either a `fileUrl` (remote) or binary file attachment\n- Validates required fields: needs at least `filename` or `fileUrl` plus a valid `platform` value\n- Sanitises SKU (uppercased, stripped of special chars), coerces price to float, defaults inventory to 1\n- Detects image MIME type from extension for correct Content-Type downstream\n- IF branch routes to the right upload path without duplicating logic"},"typeVersion":1},{"id":"5d68e82d-7573-4d9c-9338-64f7d1371876","name":"Upload + Vision AI","type":"n8n-nodes-base.stickyNote","position":[1248,-144],"parameters":{"color":7,"width":896,"height":722,"content":"## ☁️ Upload to URL → Vision AI\n**Nodes:** Upload to URL (×2) → Extract URL → GPT-4o Vision → Parse AI Response\n\n- Native **Upload to URL** community node handles both URL-fetch and binary-upload paths — no custom HTTP node needed\n- `Extract URL` normalises the response shape across both paths\n- GPT-4o Vision receives the **actual image URL** and generates: product title, SEO meta description, 5 bullet features, suggested category, tags array, and a short marketing blurb\n- `Parse AI Response` validates and flattens the JSON, merges with original metadata, and computes `handle` (URL slug) from the AI title"},"typeVersion":1},{"id":"114fad13-8471-41da-9db2-8af369336a5d","name":"Platform Routing","type":"n8n-nodes-base.stickyNote","position":[2160,-224],"parameters":{"color":7,"width":592,"height":770,"content":"## 🏪 Platform Routing & Product Creation\n**Nodes:** Route by Platform → Shopify Create → WooCommerce Create\n\n- Switch node reads `platform` field (`shopify` or `woocommerce`) — extend with more outputs for other platforms\n- **Shopify branch:** creates product via GraphQL-compatible REST body with `images` array pre-set to the UploadToURL CDN link, sets `status: active` or `draft` based on `publishImmediately`\n- **WooCommerce branch:** creates product with `images[0].src` set to the CDN link, maps all AI-generated fields to WC schema including `short_description` and `tags`\n- Both branches pass `compare_at_price` / `regular_price` for sale display"},"typeVersion":1},{"id":"b44b85fd-fe8f-4b18-b947-78d38570875c","name":"Notification & Response","type":"n8n-nodes-base.stickyNote","position":[2768,-208],"parameters":{"color":7,"width":480,"height":654,"content":"## 📣 Notification & Response\n**Nodes:** Build Response → Slack Notifier → Respond to Webhook\n\n- `Build Response` merges platform API reply with product metadata into a clean summary object\n- **Slack Notifier** posts a formatted message with product name, image thumbnail link, store URL, SKU, and price — easy to disable if not needed\n- Final webhook response returns `productId`, `productUrl`, `imageUrl`, `title`, `sku`, `platform` — ready to consume by a mobile app or Zapier downstream"},"typeVersion":1},{"id":"016d11e3-a873-4796-806f-5d6f9b036420","name":"Webhook - Receive Product","type":"n8n-nodes-base.webhook","notes":"Accepts POST with product metadata + fileUrl or binary image. Supports both mobile uploads and remote URL ingestion.","position":[672,224],"webhookId":"3e3aae1f-683d-4508-bd84-544d9d5f0369","parameters":{"path":"product-catalog-upload","options":{"allowedOrigins":"*"},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"14fe3281-67a8-4ce6-84c3-6fea8102a6e8","name":"Validate & Enrich Payload","type":"n8n-nodes-base.code","position":[880,224],"parameters":{"jsCode":"const body = $input.first().json.body || $input.first().json;\n\n// --- Platform validation ---\nconst allowedPlatforms = ['shopify', 'woocommerce'];\nconst platform = (body.platform || $vars.DEFAULT_PLATFORM || 'shopify').toLowerCase();\nif (!allowedPlatforms.includes(platform)) {\n  throw new Error(`Invalid platform \"${platform}\". Must be: ${allowedPlatforms.join(' | ')}`);\n}\n\n// --- File source validation ---\nif (!body.fileUrl && !body.filename) {\n  throw new Error('Provide either fileUrl (remote image) or filename (for binary upload).');\n}\n\n// --- Filename & MIME detection ---\nconst filename = body.filename || body.fileUrl?.split('?')[0].split('/').pop() || 'product.jpg';\nconst ext = filename.split('.').pop()?.toLowerCase() || 'jpg';\nconst mimeMap = { jpg: 'image/jpeg', jpeg: 'image/jpeg', png: 'image/png', webp: 'image/webp', gif: 'image/gif', avif: 'image/avif' };\nconst mimeType = mimeMap[ext] || 'image/jpeg';\n\n// --- SKU sanitisation ---\nconst rawSku = body.sku || '';\nconst sku = rawSku.toUpperCase().replace(/[^A-Z0-9\\-_]/g, '').trim() || `SKU-${Date.now()}`;\n\n// --- Price coercion ---\nconst price = parseFloat(body.price) || 0;\nconst compareAtPrice = parseFloat(body.compareAtPrice) || null;\nif (price < 0) throw new Error('Price cannot be negative.');\n\n// --- Inventory ---\nconst inventory = parseInt(body.inventory, 10);\nconst safeInventory = isNaN(inventory) ? 1 : Math.max(0, inventory);\n\n// --- Tags ---\nconst tagsRaw = body.tags || '';\nconst tagsArray = tagsRaw.split(',').map(t => t.trim()).filter(Boolean);\n\nreturn [{\n  json: {\n    // Source\n    filename,\n    fileUrl: body.fileUrl || null,\n    mimeType,\n    // Platform\n    platform,\n    publishImmediately: body.publishImmediately !== false,\n    // Product fields\n    sku,\n    price,\n    compareAtPrice,\n    vendor: body.vendor || '',\n    productType: body.productType || '',\n    inventory: safeInventory,\n    weight: parseFloat(body.weight) || null,\n    tags: tagsArray,\n    // Pass-through for AI context\n    userTitle: body.title || '',\n    userDescription: body.description || '',\n    // Meta\n    receivedAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"7a2b2887-718f-4d76-820a-c5b452e706c5","name":"Has Remote URL?","type":"n8n-nodes-base.if","position":[1104,224],"parameters":{"options":{},"conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-fileurl","operator":{"type":"string","operation":"notEmpty"},"leftValue":"={{ $json.fileUrl }}","rightValue":""}]}},"typeVersion":2},{"id":"a760c1eb-3636-4acf-854f-fd995a00c5b7","name":"Upload to URL - Remote","type":"n8n-nodes-uploadtourl.uploadToUrl","position":[1328,112],"parameters":{"operation":"uploadFile"},"credentials":{"uploadToUrlApi":{"id":"aTtpEWKPdBd8vRfH","name":"Upload to URL account 3"}},"typeVersion":1},{"id":"1e27bcd3-29cb-41a6-acfb-ee74a10b6ef6","name":"Upload to URL - Binary","type":"n8n-nodes-uploadtourl.uploadToUrl","position":[1328,352],"parameters":{"operation":"uploadFile"},"credentials":{"uploadToUrlApi":{"id":"aTtpEWKPdBd8vRfH","name":"Upload to URL account 3"}},"typeVersion":1},{"id":"4117a58c-304e-4ac7-b5e2-3b0fbcbfbe6c","name":"Extract Image URL","type":"n8n-nodes-base.code","position":[1552,224],"parameters":{"jsCode":"const uploadResp = $input.first().json;\nconst meta = $('Validate & Enrich Payload').first().json;\n\nconst imageUrl =\n  uploadResp.url ||\n  uploadResp.link ||\n  uploadResp.data?.url ||\n  uploadResp.file?.url ||\n  uploadResp.shortUrl;\n\nif (!imageUrl) {\n  throw new Error('Upload to URL returned no public URL. Raw response: ' + JSON.stringify(uploadResp));\n}\n\n// Ensure URL is HTTPS (some CDNs return HTTP)\nconst secureUrl = imageUrl.replace(/^http:\\/\\//, 'https://');\n\nreturn [{\n  json: {\n    ...meta,\n    imageUrl: secureUrl,\n    uploadId: uploadResp.id || uploadResp.data?.id || null,\n    fileSizeBytes: uploadResp.size || uploadResp.data?.size || null\n  }\n}];"},"typeVersion":2},{"id":"f0f9f546-2e0a-4ee1-a846-778aa59b4bc8","name":"GPT-4o Vision - Analyse Product","type":"@n8n/n8n-nodes-langchain.openAi","notes":"Sends the uploaded image URL to GPT-4o Vision. Returns structured product content: title, SEO description, features, tags, category, and a URL handle.","position":[1760,224],"parameters":{"modelId":{"__rl":true,"mode":"list","value":""},"options":{"maxTokens":1200,"temperature":0.6},"messages":{"values":[{"role":"system","content":"You are a professional e-commerce copywriter and product categorisation expert. Analyse the product image provided and return ONLY a valid JSON object — no markdown, no preamble, no trailing text."},{"content":"=Analyse this product image and generate all required e-commerce content.\n\nImage URL: {{ $json.imageUrl }}\nUser-provided title (may be empty): {{ $json.userTitle }}\nUser-provided description (may be empty): {{ $json.userDescription }}\nVendor: {{ $json.vendor || 'Unknown' }}\nProduct Type hint: {{ $json.productType || 'Not specified' }}\nExisting tags: {{ $json.tags.join(', ') || 'None' }}\nPrice: {{ $json.price }}\n\nReturn ONLY this JSON structure:\n{\n  \"title\": \"Short compelling product title (max 70 chars)\",\n  \"seoTitle\": \"SEO-optimised title with keywords (max 70 chars)\",\n  \"description\": \"Rich HTML product description (2-3 paragraphs, can use <p> <strong> <ul> <li> tags)\",\n  \"shortDescription\": \"One-sentence plain text summary for WooCommerce short_description\",\n  \"bulletFeatures\": [\"Feature 1\", \"Feature 2\", \"Feature 3\", \"Feature 4\", \"Feature 5\"],\n  \"suggestedCategory\": \"Most specific applicable product category\",\n  \"suggestedTags\": [\"tag1\", \"tag2\", \"tag3\", \"tag4\", \"tag5\"],\n  \"metaDescription\": \"SEO meta description (max 155 chars)\",\n  \"handle\": \"url-slug-from-title-lowercase-hyphenated\",\n  \"marketingBlurb\": \"One punchy sentence for social media or email marketing\",\n  \"confidenceScore\": 0.95\n}"}]}},"typeVersion":1.5},{"id":"14f53b63-c22a-4030-989b-46b51475926f","name":"Parse & Merge AI Product Data","type":"n8n-nodes-base.code","position":[2048,224],"parameters":{"jsCode":"const aiRaw = $input.first().json;\nconst productData = $('Extract Image URL').first().json;\n\n// --- Parse AI response ---\nlet ai;\ntry {\n  const raw = aiRaw.message?.content || aiRaw.choices?.[0]?.message?.content || aiRaw.content || aiRaw.text;\n  ai = typeof raw === 'string' ? JSON.parse(raw) : raw;\n} catch (e) {\n  throw new Error('Failed to parse GPT-4o JSON response: ' + e.message);\n}\n\n// --- Validate essentials ---\nif (!ai.title) throw new Error('GPT-4o did not return a product title.');\n\n// --- Merge user-provided tags with AI tags (deduplicated) ---\nconst allTags = [...new Set([\n  ...productData.tags,\n  ...(ai.suggestedTags || [])\n])].slice(0, 15); // Most platforms cap at 15 tags\n\n// --- Build clean URL handle ---\nconst handle = (ai.handle || ai.title)\n  .toLowerCase()\n  .replace(/[^a-z0-9\\s-]/g, '')\n  .replace(/\\s+/g, '-')\n  .replace(/-+/g, '-')\n  .trim();\n\n// --- Shopify status ---\nconst shopifyStatus = productData.publishImmediately ? 'active' : 'draft';\n\n// --- WooCommerce status ---\nconst wcStatus = productData.publishImmediately ? 'publish' : 'draft';\n\nreturn [{\n  json: {\n    // Pass-through\n    platform: productData.platform,\n    imageUrl: productData.imageUrl,\n    sku: productData.sku,\n    price: productData.price,\n    compareAtPrice: productData.compareAtPrice,\n    vendor: productData.vendor,\n    productType: productData.productType || ai.suggestedCategory,\n    inventory: productData.inventory,\n    weight: productData.weight,\n    uploadId: productData.uploadId,\n\n    // AI-generated\n    title: productData.userTitle || ai.title,\n    seoTitle: ai.seoTitle,\n    description: ai.description,\n    shortDescription: ai.shortDescription,\n    bulletFeatures: ai.bulletFeatures || [],\n    category: ai.suggestedCategory,\n    tags: allTags,\n    metaDescription: ai.metaDescription,\n    handle,\n    marketingBlurb: ai.marketingBlurb,\n    confidenceScore: ai.confidenceScore || null,\n\n    // Platform-specific computed\n    shopifyStatus,\n    wcStatus,\n\n    generatedAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"2d70dfc8-89e8-4ef2-ba5e-d603d1131d33","name":"Route by Platform","type":"n8n-nodes-base.switch","position":[2208,224],"parameters":{"rules":{"values":[{"outputKey":"Shopify","conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.platform }}","rightValue":"shopify"}]},"renameOutput":true},{"outputKey":"WooCommerce","conditions":{"options":{"caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.platform }}","rightValue":"woocommerce"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3},{"id":"14303dea-d4f1-49ac-8278-97d285f669b2","name":"Shopify - Create Product","type":"n8n-nodes-base.shopify","notes":"Creates product with image URL pre-attached. Sets SEO metafields, variant pricing, and inventory. Status: active or draft based on publishImmediately.","position":[2432,112],"parameters":{"title":"={{ $json.title }}","resource":"product","authentication":"oAuth2","additionalFields":{}},"typeVersion":1},{"id":"866f00db-805f-4884-b5ec-541651235f0a","name":"WooCommerce - Create Product","type":"n8n-nodes-base.httpRequest","notes":"Creates WooCommerce product via REST API. Sets image src to UploadToURL CDN link. Writes Yoast SEO meta fields and marketing blurb to post meta.","position":[2432,352],"parameters":{"url":"={{ $credentials.url }}/wp-json/wc/v3/products","method":"POST","options":{"response":{"response":{"responseFormat":"json"}}},"jsonBody":"={\n  \"name\": {{ JSON.stringify($json.title) }},\n  \"slug\": {{ JSON.stringify($json.handle) }},\n  \"type\": \"simple\",\n  \"status\": {{ JSON.stringify($json.wcStatus) }},\n  \"description\": {{ JSON.stringify($json.description) }},\n  \"short_description\": {{ JSON.stringify($json.shortDescription) }},\n  \"sku\": {{ JSON.stringify($json.sku) }},\n  \"regular_price\": {{ JSON.stringify(String($json.price)) }},\n  \"sale_price\": {{ $json.compareAtPrice ? JSON.stringify(String($json.price)) : '\"\"' }},\n  \"manage_stock\": true,\n  \"stock_quantity\": {{ $json.inventory }},\n  \"weight\": {{ JSON.stringify($json.weight ? String($json.weight) : '') }},\n  \"categories\": [{ \"name\": {{ JSON.stringify($json.category) }} }],\n  \"tags\": {{ JSON.stringify($json.tags.map(t => ({ name: t }))) }},\n  \"images\": [{ \"src\": {{ JSON.stringify($json.imageUrl) }}, \"alt\": {{ JSON.stringify($json.title) }}, \"position\": 1 }],\n  \"meta_data\": [\n    { \"key\": \"_yoast_wpseo_title\", \"value\": {{ JSON.stringify($json.seoTitle) }} },\n    { \"key\": \"_yoast_wpseo_metadesc\", \"value\": {{ JSON.stringify($json.metaDescription) }} },\n    { \"key\": \"marketing_blurb\", \"value\": {{ JSON.stringify($json.marketingBlurb) }} }\n  ]\n}","sendBody":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpBasicAuth"},"credentials":{"httpBasicAuth":{"id":"cwDsqXTweoX9Cfg3","name":"Hong Sau Resorts - Live"}},"typeVersion":4.2},{"id":"16ff0092-fdda-4675-aae9-594a12578d9d","name":"Build Product Response","type":"n8n-nodes-base.code","position":[2640,224],"parameters":{"jsCode":"const platformResp = $input.first().json;\nconst productData = $('Parse & Merge AI Product Data').first().json;\n\n// Normalise Shopify vs WooCommerce response shapes\nconst isShopify = productData.platform === 'shopify';\n\nconst productId = isShopify\n  ? (platformResp.product?.id || platformResp.id)\n  : (platformResp.id);\n\nconst productUrl = isShopify\n  ? `https://${platformResp.product?.handle || productData.handle}.myshopify.com/products/${platformResp.product?.handle || productData.handle}`\n  : (platformResp.permalink || `${platformResp.link || ''}`);\n\nconst imageUrl = isShopify\n  ? (platformResp.product?.images?.[0]?.src || productData.imageUrl)\n  : (platformResp.images?.[0]?.src || productData.imageUrl);\n\nif (!productId) {\n  throw new Error(`${productData.platform} did not return a product ID. Response: ${JSON.stringify(platformResp).slice(0, 300)}`);\n}\n\nreturn [{\n  json: {\n    success: true,\n    platform: productData.platform,\n    productId: String(productId),\n    productUrl,\n    imageUrl,\n    title: productData.title,\n    sku: productData.sku,\n    price: productData.price,\n    compareAtPrice: productData.compareAtPrice,\n    category: productData.category,\n    tags: productData.tags,\n    handle: productData.handle,\n    inventory: productData.inventory,\n    marketingBlurb: productData.marketingBlurb,\n    confidenceScore: productData.confidenceScore,\n    publishStatus: productData.shopifyStatus || productData.wcStatus,\n    generatedAt: productData.generatedAt,\n    createdAt: new Date().toISOString()\n  }\n}];"},"typeVersion":2},{"id":"b247362f-8b43-4487-9055-714a9f21f04c","name":"Slack - Notify Team","type":"n8n-nodes-base.slack","notes":"Optional: posts a formatted Slack notification to #product-updates with image link, product URL, SKU, price, and AI confidence score. Disable this node if Slack is not used.","position":[2864,112],"webhookId":"adc2f7e1-f290-465a-a753-42cb53f6825d","parameters":{"text":"=:new: *New product created!*\n\n*{{ $json.title }}*\nSKU: `{{ $json.sku }}` | Price: ${{ $json.price }}{{ $json.compareAtPrice ? ' ~~$' + $json.compareAtPrice + '~~' : '' }}\nPlatform: {{ $json.platform | upcase }}\nCategory: {{ $json.category }}\nTags: {{ $json.tags.join(', ') }}\n\n:frame_with_picture: <{{ $json.imageUrl }}|View image>\n:link: <{{ $json.productUrl }}|View product>\n\n_AI confidence: {{ Math.round(($json.confidenceScore || 0) * 100) }}%_\n_{{ $json.marketingBlurb }}_","otherOptions":{},"authentication":"oAuth2"},"credentials":{"slackOAuth2Api":{"id":"RYkcspsGW073XNK0","name":"Mediajade Slack"}},"typeVersion":2.2},{"id":"2cbafe11-18db-4f5d-a02a-5c2b7c16376e","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[2864,320],"parameters":{"options":{"responseCode":201,"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"}]}},"respondWith":"json","responseBody":"={{ $('Build Product Response').first().json }}"},"typeVersion":1.1}],"pinData":{},"connections":{"Has Remote URL?":{"main":[[{"node":"Upload to URL - Remote","type":"main","index":0}],[{"node":"Upload to URL - Binary","type":"main","index":0}]]},"Extract Image URL":{"main":[[{"node":"GPT-4o Vision - Analyse Product","type":"main","index":0}]]},"Route by Platform":{"main":[[{"node":"Shopify - Create Product","type":"main","index":0}],[{"node":"WooCommerce - Create Product","type":"main","index":0}]]},"Slack - Notify Team":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]},"Build Product Response":{"main":[[{"node":"Slack - Notify Team","type":"main","index":0}]]},"Upload to URL - Binary":{"main":[[{"node":"Extract Image URL","type":"main","index":0}]]},"Upload to URL - Remote":{"main":[[{"node":"Extract Image URL","type":"main","index":0}]]},"Shopify - Create Product":{"main":[[{"node":"Build Product Response","type":"main","index":0}]]},"Validate & Enrich Payload":{"main":[[{"node":"Has Remote URL?","type":"main","index":0}]]},"Webhook - Receive Product":{"main":[[{"node":"Validate & Enrich Payload","type":"main","index":0}]]},"WooCommerce - Create Product":{"main":[[{"node":"Build Product Response","type":"main","index":0}]]},"Parse & Merge AI Product Data":{"main":[[{"node":"Route by Platform","type":"main","index":0}]]},"GPT-4o Vision - Analyse Product":{"main":[[{"node":"Parse & Merge AI Product Data","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":19,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.slack":{"count":1},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.shopify":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":1},"@n8n/n8n-nodes-langchain.openAi":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"n8n-nodes-uploadtourl.uploadToUrl":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Jitesh Dugar","username":"jiteshdugar","bio":"AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.","verified":true,"links":["https://www.linkedin.com/in/jiteshdugar"],"avatar":"https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":312,"icon":"file:shopify.svg","name":"n8n-nodes-base.shopify","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.shopify/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/shopify/"}]},"categories":["Sales"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"Shopify"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNTggNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzk1YmY0NyIgZD0iTTQ5LjI1NSAxMi40ODRhLjYzLjYzIDAgMCAwLS41NjQtLjUyN2MtLjIyNS0uMDM3LTUuMTctLjM3Ni01LjE3LS4zNzZsLTMuNzctMy43N2MtLjM0LS4zNzYtMS4wOTItLjI2Ni0xLjM3Ni0uMTg4LS4wMzcgMC0uNzUyLjIyNS0xLjkyMi42MDUtMS4xMzctMy4zLTMuMTUtNi4zMDYtNi42OTYtNi4zMDZoLS4zMDNDMjguNDM4LjYwNSAyNy4xOTQgMCAyNi4xNDQgMGMtOC4yNTYuMDM3LTEyLjIgMTAuMzMzLTEzLjQzNCAxNS41OTRsLTUuNzcgMS43N2MtMS43Ny41NjQtMS44MzUuNjA1LTIuMDczIDIuMjkzTDAgNTcuMTc1IDM2LjQ2OCA2NGwxOS43NjMtNC4yNmMwLS4wMzctNi45NC00Ni44OTctNi45NzYtNDcuMjU1ek0zNC40MzEgOC44NmMtLjkxNy4zMDMtMS45NjMuNjA1LTMuMS45NDV2LS42OGExNSAxNSAwIDAgMC0uNzUyLTQuOTk5YzEuODQ4LjI4NCAzLjEgMi4zNTcgMy44NDMgNC43MzN6bS02LjA2OC00LjI5OGMuNjAzIDEuNzc4Ljg4MyAzLjY1LjgyNiA1LjUyN3YuMzRsLTYuMzc1IDEuOTYzYzEuMjQ4LTQuNjYgMy41NS02Ljk2MiA1LjU1LTcuODN6bS0yLjQ1LTIuMjkzYTEuOTQgMS45NCAwIDAgMSAxLjA1NS4zMzljLTIuNjYgMS4yMzgtNS40NzIgNC4zNjYtNi42NzggMTAuNjI3bC01LjA0NSAxLjU0NkMxNi42NjggMTAuMDMgMTkuOTg4IDIuMjYgMjUuOTEgMi4yNnoiLz48cGF0aCBmaWxsPSIjNWU4ZTNlIiBkPSJNNDguNjkxIDExLjk1N2MtLjIyNS0uMDM3LTUuMTctLjM3Ni01LjE3LS4zNzZsLTMuNzctMy43N2EuNzUuNzUgMCAwIDAtLjUyNy0uMjI1TDM2LjQ3MiA2NGwxOS43NjMtNC4yNi02Ljk4LTQ3LjIxOGEuNjguNjggMCAwIDAtLjU2NC0uNTY0eiIvPjxwYXRoIGQ9Im0yOS43NTggMjIuOS0yLjQ1NCA3LjI0MmExMS40IDExLjQgMCAwIDAtNC43NTItMS4xMzNjLTMuODQ4IDAtNC4wMzYgMi40MTItNC4wMzYgMy4wMTggMCAzLjI5OCA4LjYzNiA0LjU2NCA4LjYzNiAxMi4zMzMgMCA2LjEtMy44ODUgMTAuMDMtOS4xIDEwLjAzLTYuMjYgMC05LjQ2Ny0zLjg4NS05LjQ2Ny0zLjg4NWwxLjY2NS01LjU1czMuMjggMi44MyA2LjA3MyAyLjgzYTIuNDcgMi40NyAwIDAgMCAyLjU2NC0yLjQ5YzAtNC4zNC03LjEtNC41MjctNy4xLTExLjYxOCAwLTUuOTYyIDQuMjk4LTExLjc3IDEyLjkzNC0xMS43NyAzLjM5NC4wNSA1LjAxOCAxIDUuMDE4IDF6Ii8+PC9nPjwvc3ltYm9sPjwvc3ZnPg=="},"displayName":"Shopify","typeVersion":1,"nodeCategories":[{"id":2,"name":"Sales"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1250,"icon":"file:openAi.svg","name":"@n8n/n8n-nodes-langchain.openAi","codex":{"data":{"alias":["LangChain","ChatGPT","Sora","DallE","whisper","audio","transcribe","tts","assistant"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg1IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NiAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MSA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"},"displayName":"OpenAI","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}