{"workflow":{"id":10500,"name":"Compare shipping rates with FedEx, DHL, BlueDart, Delhivery and Claude AI","views":56,"recentViews":0,"totalViews":56,"createdAt":"2025-11-04T12:07:24.472Z","description":"This AI-powered workflow automatically compares shipping rates across four major carriers, uses Claude AI to recommend the best option based on cost and delivery time, and optionally books shipments instantly.\n\n### How it works\n\n1. **Receive request** - Webhook accepts shipment details (origin, destination, weight, dimensions)\n2. **Validate data** - Checks required fields and calculates volumetric weight\n3. **Query carriers** - Simultaneously fetches rates from FedEx, DHL, BlueDart, and Delhivery\n4. **Normalize responses** - Parses different carrier formats into standardized structure\n5. **AI analysis** - Claude AI evaluates options considering cost, speed, and preferences\n6. **Return results** - Provides recommendation with savings analysis, or books shipment if enabled\n\n### Setup steps\n\n1. Import this workflow into your n8n instance\n2. Configure carrier API credentials:\n   - **FedEx API** - Get credentials from FedEx Developer Portal\n   - **DHL API** - Register at DHL Developer Portal\n   - **BlueDart API** - Contact BlueDart for API access\n   - **Delhivery API** - Get token from Delhivery partner portal\n3. Add **Anthropic API** credentials for Claude AI\n4. Activate workflow to generate webhook URL\n5. Test with sample request:\n   ```json\n   {\n     \"origin\": \"400001\",\n     \"destination\": \"110001\",\n     \"weight\": 2,\n     \"length\": 30,\n     \"width\": 20,\n     \"height\": 15,\n     \"deliverySpeed\": \"standard\",\n     \"autoBook\": false\n   }\n   ```\n\n### Features\n\n- **Real-time rates** from 4 carriers\n- **AI-powered recommendations** considering cost, speed, and preferences  \n- **Automatic booking** when enabled\n- **Comprehensive error handling**\n- **Detailed cost comparison** and savings analysis","workflow":{"id":"6HuVv5w13YcvIEzu","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"Compare shipping rates with FedEx, DHL, BlueDart, Delhivery and Claude AI","tags":[],"nodes":[{"id":"48452fd5-01e3-4211-86d6-cdaf40ab0c6a","name":"Receive shipment request","type":"n8n-nodes-base.webhook","position":[3424,5872],"webhookId":"shipment-quote-webhook","parameters":{"path":"shipment-quote","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"dc940eba-a7fd-48f6-aeaa-39de558d8490","name":"Validate input and calculate weights","type":"n8n-nodes-base.code","position":[3648,5872],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Extract shipment data from request body\nconst shipment = $input.item.json.body || $input.item.json;\n\n// Define required fields\nconst required = ['origin', 'destination', 'weight', 'length', 'width', 'height'];\n\n// Check for missing fields\nconst missing = required.filter(field => !shipment[field]);\nif (missing.length > 0) {\n  throw new Error(`Missing required fields: ${missing.join(', ')}`);\n}\n\n// Validate numeric values\nconst numericFields = ['weight', 'length', 'width', 'height'];\nfor (const field of numericFields) {\n  const value = parseFloat(shipment[field]);\n  if (isNaN(value) || value <= 0) {\n    throw new Error(`Invalid ${field}: must be a positive number`);\n  }\n}\n\n// Structure the data\nconst structured = {\n  origin: {\n    postalCode: shipment.origin.postalCode || shipment.origin,\n    country: shipment.origin.country || 'IN'\n  },\n  destination: {\n    postalCode: shipment.destination.postalCode || shipment.destination,\n    country: shipment.destination.country || 'IN'\n  },\n  package: {\n    weight: parseFloat(shipment.weight),\n    length: parseFloat(shipment.length),\n    width: parseFloat(shipment.width),\n    height: parseFloat(shipment.height)\n  },\n  preferences: {\n    deliverySpeed: shipment.deliverySpeed || 'standard',\n    insurance: Boolean(shipment.insurance),\n    cod: Boolean(shipment.cod),\n    autoBook: Boolean(shipment.autoBook)\n  },\n  metadata: {\n    requestId: `REQ-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n    requestedAt: new Date().toISOString()\n  }\n};\n\n// Calculate volumetric weight (standard divisor: 5000 for cm³ to kg)\nstructured.package.volumetricWeight = \n  (structured.package.length * structured.package.width * structured.package.height) / 5000;\n\n// Calculate chargeable weight (higher of actual or volumetric)\nstructured.package.chargeableWeight = Math.max(\n  structured.package.weight,\n  structured.package.volumetricWeight\n);\n\nreturn { json: structured };"},"typeVersion":2},{"id":"49ff4abf-ce3b-4033-88a7-3e542f31f4fd","name":"Get FedEx rates","type":"n8n-nodes-base.httpRequest","position":[3872,5584],"parameters":{"url":"https://api.fedex.com/rate/v1/rates/quotes","options":{"timeout":10000},"jsonBody":"={\n  \"accountNumber\": {\n    \"value\": \"{{$credentials.accountNumber}}\"\n  },\n  \"requestedShipment\": {\n    \"shipper\": {\n      \"address\": {\n        \"postalCode\": \"{{$json.origin.postalCode}}\",\n        \"countryCode\": \"{{$json.origin.country}}\"\n      }\n    },\n    \"recipient\": {\n      \"address\": {\n        \"postalCode\": \"{{$json.destination.postalCode}}\",\n        \"countryCode\": \"{{$json.destination.country}}\"\n      }\n    },\n    \"pickupType\": \"DROPOFF_AT_FEDEX_LOCATION\",\n    \"serviceType\": \"FEDEX_GROUND\",\n    \"rateRequestType\": [\"ACCOUNT\"],\n    \"requestedPackageLineItems\": [\n      {\n        \"weight\": {\n          \"value\": {{$json.package.chargeableWeight}},\n          \"units\": \"KG\"\n        },\n        \"dimensions\": {\n          \"length\": {{$json.package.length}},\n          \"width\": {{$json.package.width}},\n          \"height\": {{$json.package.height}},\n          \"units\": \"CM\"\n        }\n      }\n    ]\n  }\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"fedExApi"},"typeVersion":4.2,"continueOnFail":true},{"id":"25831822-8f70-4818-b9cd-e75dc86d0f5f","name":"Get DHL rates","type":"n8n-nodes-base.httpRequest","position":[3872,5776],"parameters":{"url":"https://api-eu.dhl.com/mydhlapi/v1/rates","options":{"timeout":10000},"jsonBody":"={\n  \"customerDetails\": {\n    \"shipperDetails\": {\n      \"postalCode\": \"{{$json.origin.postalCode}}\",\n      \"countryCode\": \"{{$json.origin.country}}\"\n    },\n    \"receiverDetails\": {\n      \"postalCode\": \"{{$json.destination.postalCode}}\",\n      \"countryCode\": \"{{$json.destination.country}}\"\n    }\n  },\n  \"accounts\": [\n    {\n      \"typeCode\": \"shipper\",\n      \"number\": \"{{$credentials.accountNumber}}\"\n    }\n  ],\n  \"plannedShippingDateAndTime\": \"{{new Date().toISOString()}}\",\n  \"unitOfMeasurement\": \"metric\",\n  \"isCustomsDeclarable\": false,\n  \"monetaryAmount\": [\n    {\n      \"typeCode\": \"declaredValue\",\n      \"value\": 100,\n      \"currency\": \"INR\"\n    }\n  ],\n  \"packages\": [\n    {\n      \"weight\": {{$json.package.chargeableWeight}},\n      \"dimensions\": {\n        \"length\": {{$json.package.length}},\n        \"width\": {{$json.package.width}},\n        \"height\": {{$json.package.height}}\n      }\n    }\n  ]\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"dhlApi"},"credentials":{"dhlApi":{"id":"7Z2cOSQyiZjGigfw","name":"DHL account"}},"typeVersion":4.2,"continueOnFail":true},{"id":"1722bca0-bbc4-48a6-98cd-2599907fa4a5","name":"Get BlueDart rates","type":"n8n-nodes-base.httpRequest","position":[3872,5968],"parameters":{"url":"https://api.bluedart.com/servlet/RoutingServlet","options":{"timeout":10000},"jsonBody":"={\n  \"Request\": {\n    \"ServiceType\": \"{{$json.preferences.deliverySpeed === 'express' ? 'P' : 'S'}}\",\n    \"OriginPincode\": \"{{$json.origin.postalCode}}\",\n    \"DestinationPincode\": \"{{$json.destination.postalCode}}\",\n    \"Weight\": \"{{$json.package.chargeableWeight}}\",\n    \"Dimensions\": {\n      \"Length\": {{$json.package.length}},\n      \"Width\": {{$json.package.width}},\n      \"Height\": {{$json.package.height}}\n    },\n    \"IsCOD\": \"{{$json.preferences.cod ? 'Y' : 'N'}}\",\n    \"CustomerCode\": \"{{$credentials.customerCode}}\",\n    \"LoginID\": \"{{$credentials.loginId}}\"\n  }\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"blueDartApi"},"typeVersion":4.2,"continueOnFail":true},{"id":"58beb078-f224-4077-b4c9-24ff36ca46d7","name":"Get Delhivery rates","type":"n8n-nodes-base.httpRequest","position":[3872,6160],"parameters":{"url":"https://track.delhivery.com/api/kinko/v1/invoice/charges/.json","options":{"timeout":10000},"sendQuery":true,"authentication":"predefinedCredentialType","queryParameters":{"parameters":[{"name":"ss","value":"Delivered"},{"name":"md","value":"={{ $json.preferences.deliverySpeed === 'express' ? 'E' : 'S' }}"},{"name":"cgm","value":"={{ $json.package.chargeableWeight }}"},{"name":"o_pin","value":"={{ $json.origin.postalCode }}"},{"name":"d_pin","value":"={{ $json.destination.postalCode }}"}]},"nodeCredentialType":"delhiveryApi"},"typeVersion":4.2,"continueOnFail":true},{"id":"67140ee6-bba6-4482-a3b0-38eb6d10af27","name":"Combine all carrier responses","type":"n8n-nodes-base.merge","position":[4096,5872],"parameters":{"mode":"mergeByPosition"},"typeVersion":3},{"id":"4971d1ba-2f6e-4f67-8c90-d4443917cb83","name":"Parse and normalize carrier rates","type":"n8n-nodes-base.code","position":[4320,5872],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Get shipment details and carrier responses\nconst shipment = $('Validate input and calculate weights').item.json;\nconst fedex = $('Get FedEx rates').item.json;\nconst dhl = $('Get DHL rates').item.json;\nconst bluedart = $('Get BlueDart rates').item.json;\nconst delhivery = $('Get Delhivery rates').item.json;\n\nconst rates = [];\n\n// Parse FedEx response\ntry {\n  if (fedex && !fedex.error && fedex.output?.rateReplyDetails) {\n    const fedexRate = fedex.output.rateReplyDetails[0];\n    rates.push({\n      carrier: 'FedEx',\n      cost: parseFloat(fedexRate.ratedShipmentDetails?.[0]?.totalNetCharge || 0),\n      currency: fedexRate.ratedShipmentDetails?.[0]?.currency || 'INR',\n      transitDays: parseInt(fedexRate.commit?.transitTime || 999),\n      service: fedexRate.serviceName || 'Standard',\n      available: true\n    });\n  }\n} catch (error) {\n  console.log('FedEx parsing error:', error.message);\n}\n\n// Parse DHL response\ntry {\n  if (dhl && !dhl.error && dhl.products && dhl.products.length > 0) {\n    const dhlRate = dhl.products[0];\n    rates.push({\n      carrier: 'DHL',\n      cost: parseFloat(dhlRate.totalPrice?.[0]?.price || 0),\n      currency: dhlRate.totalPrice?.[0]?.priceCurrency || 'INR',\n      transitDays: parseInt(dhlRate.deliveryCapabilities?.estimatedDeliveryDateAndTime ? \n        Math.ceil((new Date(dhlRate.deliveryCapabilities.estimatedDeliveryDateAndTime) - new Date()) / (1000 * 60 * 60 * 24)) : 999),\n      service: dhlRate.productName || 'Standard',\n      available: true\n    });\n  }\n} catch (error) {\n  console.log('DHL parsing error:', error.message);\n}\n\n// Parse BlueDart response\ntry {\n  if (bluedart && !bluedart.error && bluedart.Response) {\n    rates.push({\n      carrier: 'BlueDart',\n      cost: parseFloat(bluedart.Response.Charges?.TotalAmount || 0),\n      currency: 'INR',\n      transitDays: parseInt(bluedart.Response.TransitDays || 999),\n      service: bluedart.Response.ServiceType || 'Standard',\n      available: bluedart.Response.Status === 'Success'\n    });\n  }\n} catch (error) {\n  console.log('BlueDart parsing error:', error.message);\n}\n\n// Parse Delhivery response\ntry {\n  if (delhivery && !delhivery.error && Array.isArray(delhivery) && delhivery.length > 0) {\n    const delhiveryRate = delhivery[0];\n    rates.push({\n      carrier: 'Delhivery',\n      cost: parseFloat(delhiveryRate.total_amount || 0),\n      currency: 'INR',\n      transitDays: parseInt(delhiveryRate.transit_time || 999),\n      service: delhiveryRate.mode || 'Standard',\n      available: true\n    });\n  }\n} catch (error) {\n  console.log('Delhivery parsing error:', error.message);\n}\n\n// Filter out invalid rates and sort by cost\nconst validRates = rates.filter(r => r.cost > 0 && r.available);\n\nif (validRates.length === 0) {\n  throw new Error('No valid rates received from any carrier. Please check API credentials and service availability.');\n}\n\n// Sort rates by cost (lowest first)\nvalidRates.sort((a, b) => a.cost - b.cost);\n\nreturn {\n  json: {\n    shipmentDetails: shipment,\n    rates: validRates,\n    ratesCount: validRates.length,\n    carriersQueried: 4,\n    carriersResponded: validRates.length\n  }\n};"},"typeVersion":2},{"id":"3353c46c-c50f-4cee-a8bd-d3628f105ea5","name":"Analyze with Claude AI","type":"@n8n/n8n-nodes-langchain.agent","position":[4544,5872],"parameters":{"text":"=You are a shipping logistics expert. Analyze these shipping rates and recommend the best carrier based on the customer's preferences.\n\n**Available Rates:**\n{{ JSON.stringify($json.rates, null, 2) }}\n\n**Customer Preferences:**\n- Delivery Speed: {{ $json.shipmentDetails.preferences.deliverySpeed }}\n- Insurance Required: {{ $json.shipmentDetails.preferences.insurance }}\n- Cash on Delivery (COD): {{ $json.shipmentDetails.preferences.cod }}\n\n**Analysis Guidelines:**\n1. If deliverySpeed is \"express\", prioritize carriers with fewer transit days\n2. If deliverySpeed is \"standard\", balance cost and transit time\n3. Consider insurance and COD requirements\n4. Provide a value score from 1-100 based on overall value\n\n**Response Format (JSON only):**\n{\n  \"recommendedCarrier\": \"carrier name\",\n  \"reasoning\": \"brief explanation of why this carrier is best\",\n  \"valueScore\": 85\n}","options":{"systemMessage":"You are a shipping logistics expert that provides carrier recommendations in JSON format only. Never include markdown code blocks or additional text."},"promptType":"define"},"typeVersion":1.6},{"id":"cd07d172-2e69-48d5-9701-8283e895dd26","name":"Claude AI model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[4616,6096],"parameters":{"model":"claude-sonnet-4-20250514","options":{"temperature":0.3}},"credentials":{"anthropicApi":{"id":"fK55jZdb6CaYNukq","name":"Anthropic account - test"}},"typeVersion":1},{"id":"6d8c057a-efd9-4c53-b5b8-4d343da94a7d","name":"Build final response","type":"n8n-nodes-base.code","position":[4896,5872],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Extract AI response\nconst aiResponse = $input.item.json;\nlet aiText = aiResponse.response || aiResponse.output || aiResponse.text || '';\n\n// Handle content array format\nif (aiResponse.content && Array.isArray(aiResponse.content)) {\n  aiText = aiResponse.content[0]?.text || '';\n}\n\n// Clean JSON from markdown code blocks\nconst cleanText = aiText\n  .replace(/```json\\s*/g, '')\n  .replace(/```\\s*/g, '')\n  .trim();\n\nlet aiRecommendation;\ntry {\n  aiRecommendation = JSON.parse(cleanText);\n} catch (error) {\n  throw new Error(`Failed to parse AI response: ${error.message}. Response was: ${cleanText}`);\n}\n\n// Get normalized rates data\nconst ratesData = $('Parse and normalize carrier rates').item.json;\n\n// Find the recommended carrier in rates\nconst recommended = ratesData.rates.find(\n  r => r.carrier.toLowerCase() === aiRecommendation.recommendedCarrier.toLowerCase()\n);\n\nif (!recommended) {\n  throw new Error(`Recommended carrier \"${aiRecommendation.recommendedCarrier}\" not found in available rates`);\n}\n\n// Calculate comparison metrics\nconst sorted = [...ratesData.rates].sort((a, b) => a.cost - b.cost);\nconst cheapest = sorted[0];\nconst fastest = [...ratesData.rates].sort((a, b) => a.transitDays - b.transitDays)[0];\nconst mostExpensive = sorted[sorted.length - 1];\n\nconst savingsVsMostExpensive = mostExpensive.cost - recommended.cost;\nconst extraCostVsCheapest = recommended.cost - cheapest.cost;\n\nreturn {\n  json: {\n    requestId: ratesData.shipmentDetails.metadata.requestId,\n    recommended: {\n      ...recommended,\n      reasoning: aiRecommendation.reasoning,\n      valueScore: aiRecommendation.valueScore\n    },\n    comparison: {\n      cheapestCarrier: cheapest.carrier,\n      cheapestCost: cheapest.cost.toFixed(2),\n      fastestCarrier: fastest.carrier,\n      fastestTransitDays: fastest.transitDays,\n      savingsVsMostExpensive: savingsVsMostExpensive.toFixed(2),\n      extraCostVsCheapest: extraCostVsCheapest.toFixed(2),\n      totalOptionsCompared: ratesData.rates.length\n    },\n    allRates: sorted,\n    shipmentDetails: ratesData.shipmentDetails\n  }\n};"},"typeVersion":2},{"id":"86b26897-d45d-4305-bf3e-0b51bfba2090","name":"Check if auto-booking enabled","type":"n8n-nodes-base.if","position":[5120,5872],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $json.shipmentDetails.preferences.autoBook }}","rightValue":true}]}},"typeVersion":2},{"id":"ce8a11a8-6b61-4a78-8397-e8988835f20d","name":"Prepare booking request","type":"n8n-nodes-base.code","position":[5344,5776],"parameters":{"mode":"runOnceForEachItem","jsCode":"const response = $input.item.json;\nconst carrier = response.recommended.carrier;\n\n// Map carriers to their booking endpoints\nconst carrierEndpoints = {\n  'FedEx': 'https://api.fedex.com/ship/v1/shipments',\n  'DHL': 'https://api-eu.dhl.com/mydhlapi/v1/shipments',\n  'BlueDart': 'https://api.bluedart.com/servlet/RoutingServlet',\n  'Delhivery': 'https://track.delhivery.com/api/cmu/create.json'\n};\n\nconst endpoint = carrierEndpoints[carrier];\n\nif (!endpoint) {\n  throw new Error(`No booking endpoint configured for carrier: ${carrier}`);\n}\n\n// Generate unique booking reference\nconst bookingRef = `BK-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\nreturn {\n  json: {\n    carrier,\n    endpoint,\n    shipmentData: response.shipmentDetails,\n    recommendedService: response.recommended.service,\n    estimatedCost: response.recommended.cost,\n    bookingRef\n  }\n};"},"typeVersion":2},{"id":"b9272e4f-0012-4475-9260-03c051c5896c","name":"Book shipment with carrier","type":"n8n-nodes-base.httpRequest","position":[5568,5776],"parameters":{"url":"={{ $json.endpoint }}","options":{"timeout":15000},"jsonBody":"={\n  \"shipment\": {{ JSON.stringify($json.shipmentData) }},\n  \"service\": \"{{ $json.recommendedService }}\",\n  \"reference\": \"{{ $json.bookingRef }}\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"06218eee-b8f1-4a42-a153-fa0d96f50884","name":"Format booking confirmation","type":"n8n-nodes-base.code","position":[5792,5776],"parameters":{"mode":"runOnceForEachItem","jsCode":"const bookingResponse = $input.item.json;\nconst preparedData = $('Prepare booking request').item.json;\nconst recommendation = $('Build final response').item.json;\n\n// Extract tracking number from various carrier response formats\nlet trackingNumber = 'PENDING';\n\nif (bookingResponse.tracking_number) {\n  trackingNumber = bookingResponse.tracking_number;\n} else if (bookingResponse.trackingNumber) {\n  trackingNumber = bookingResponse.trackingNumber;\n} else if (bookingResponse.trackingId) {\n  trackingNumber = bookingResponse.trackingId;\n} else if (bookingResponse.shipmentIdentificationNumber) {\n  trackingNumber = bookingResponse.shipmentIdentificationNumber;\n}\n\nreturn {\n  json: {\n    success: true,\n    booked: true,\n    status: 'Shipment booked successfully',\n    carrier: recommendation.recommended.carrier,\n    trackingNumber,\n    estimatedCost: recommendation.recommended.cost,\n    currency: recommendation.recommended.currency,\n    estimatedTransitDays: recommendation.recommended.transitDays,\n    service: recommendation.recommended.service,\n    savings: recommendation.comparison.savingsVsMostExpensive,\n    bookingRef: preparedData.bookingRef,\n    requestId: recommendation.requestId\n  }\n};"},"typeVersion":2},{"id":"1c155c2d-46e2-4926-a1b5-3eb1715f2635","name":"Format quote response","type":"n8n-nodes-base.code","position":[5792,5968],"parameters":{"mode":"runOnceForEachItem","jsCode":"const response = $input.item.json;\n\nreturn {\n  json: {\n    success: true,\n    booked: false,\n    status: 'Quote generated - manual booking required',\n    message: 'Rate comparison completed. Enable autoBook in request to book automatically.',\n    recommended: {\n      carrier: response.recommended.carrier,\n      cost: response.recommended.cost,\n      currency: response.recommended.currency,\n      transitDays: response.recommended.transitDays,\n      service: response.recommended.service,\n      reasoning: response.recommended.reasoning,\n      valueScore: response.recommended.valueScore\n    },\n    comparison: response.comparison,\n    allRates: response.allRates.map(rate => ({\n      carrier: rate.carrier,\n      cost: rate.cost,\n      currency: rate.currency,\n      transitDays: rate.transitDays,\n      service: rate.service\n    })),\n    requestId: response.requestId\n  }\n};"},"typeVersion":2},{"id":"75d57ff1-41b6-4f26-959e-9745cbec5e55","name":"Send response to client","type":"n8n-nodes-base.respondToWebhook","position":[6016,5872],"parameters":{"options":{"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"}]}},"respondWith":"json","responseBody":"={{ JSON.stringify($json, null, 2) }}"},"typeVersion":1},{"id":"67db4ae5-ac95-4285-b69c-9cf11b29d36d","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2432,5200],"parameters":{"width":760,"height":1084,"content":"## Compare shipping rates with FedEx, DHL, BlueDart, Delhivery and Claude AI\n\nThis AI-powered workflow automatically compares shipping rates across four major carriers, uses Claude AI to recommend the best option based on cost and delivery time, and optionally books shipments instantly.\n\n### How it works\n\n1. **Receive request** - Webhook accepts shipment details (origin, destination, weight, dimensions)\n2. **Validate data** - Checks required fields and calculates volumetric weight\n3. **Query carriers** - Simultaneously fetches rates from FedEx, DHL, BlueDart, and Delhivery\n4. **Normalize responses** - Parses different carrier formats into standardized structure\n5. **AI analysis** - Claude AI evaluates options considering cost, speed, and preferences\n6. **Return results** - Provides recommendation with savings analysis, or books shipment if enabled\n\n### Setup steps\n\n1. Import this workflow into your n8n instance\n2. Configure carrier API credentials:\n   - **FedEx API** - Get credentials from FedEx Developer Portal\n   - **DHL API** - Register at DHL Developer Portal\n   - **BlueDart API** - Contact BlueDart for API access\n   - **Delhivery API** - Get token from Delhivery partner portal\n3. Add **Anthropic API** credentials for Claude AI\n4. Activate workflow to generate webhook URL\n5. Test with sample request:\n   ```json\n   {\n     \"origin\": \"400001\",\n     \"destination\": \"110001\",\n     \"weight\": 2,\n     \"length\": 30,\n     \"width\": 20,\n     \"height\": 15,\n     \"deliverySpeed\": \"standard\",\n     \"autoBook\": false\n   }\n   ```\n\n### Features\n\n- **Real-time rates** from 4 carriers\n- **AI-powered recommendations** considering cost, speed, and preferences  \n- **Automatic booking** when enabled\n- **Comprehensive error handling**\n- **Detailed cost comparison** and savings analysis"},"typeVersion":1},{"id":"52fd0104-1bbc-46ac-9d41-1783efe02dff","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[3340,5704],"parameters":{"color":4,"width":424,"height":328,"content":"## 1. Input validation"},"typeVersion":1},{"id":"8dc75b93-73ba-4e3a-aebd-f37f276ea69c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[3788,5444],"parameters":{"color":4,"width":456,"height":684,"content":"## 2. Fetch carrier rates"},"typeVersion":1},{"id":"1ea2ac82-f318-40d6-a862-9926a8ea0f10","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[4292,5748],"parameters":{"color":4,"width":712,"height":284,"content":"## 3. AI recommendation"},"typeVersion":1},{"id":"b99daf49-429a-4c56-a660-23d11a0d982d","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[5052,5636],"parameters":{"color":4,"width":1176,"height":492,"content":"## 4. Book or quote"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"21367db6-abe9-433d-acaf-c68d2cbbdef3","connections":{"Get DHL rates":{"main":[[{"node":"Combine all carrier responses","type":"main","index":1}]]},"Claude AI model":{"ai_languageModel":[[{"node":"Analyze with Claude AI","type":"ai_languageModel","index":0}]]},"Get FedEx rates":{"main":[[{"node":"Combine all carrier responses","type":"main","index":0}]]},"Get BlueDart rates":{"main":[[{"node":"Combine all carrier responses","type":"main","index":0}]]},"Get Delhivery rates":{"main":[[{"node":"Combine all carrier responses","type":"main","index":1}]]},"Build final response":{"main":[[{"node":"Check if auto-booking enabled","type":"main","index":0}]]},"Format quote response":{"main":[[{"node":"Send response to client","type":"main","index":0}]]},"Analyze with Claude AI":{"main":[[{"node":"Build final response","type":"main","index":0}]]},"Prepare booking request":{"main":[[{"node":"Book shipment with carrier","type":"main","index":0}]]},"Receive shipment request":{"main":[[{"node":"Validate input and calculate weights","type":"main","index":0}]]},"Book shipment with carrier":{"main":[[{"node":"Format booking confirmation","type":"main","index":0}]]},"Format booking confirmation":{"main":[[{"node":"Send response to client","type":"main","index":0}]]},"Check if auto-booking enabled":{"main":[[{"node":"Prepare booking request","type":"main","index":0}],[{"node":"Format quote response","type":"main","index":0}]]},"Combine all carrier responses":{"main":[[{"node":"Parse and normalize carrier rates","type":"main","index":0}]]},"Parse and normalize carrier rates":{"main":[[{"node":"Analyze with Claude AI","type":"main","index":0}]]},"Validate input and calculate weights":{"main":[[{"node":"Get FedEx rates","type":"main","index":0},{"node":"Get DHL rates","type":"main","index":0},{"node":"Get BlueDart rates","type":"main","index":0},{"node":"Get Delhivery rates","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":5},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?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":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/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/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.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"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":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":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":49,"name":"AI Summarization"}],"image":[]}}